日期:2014-05-18  浏览次数:20491 次

100分,请高手帮我说说以下代码中说的“事件与委托”的怪现象。谢谢了,在线,立即给。
代码如下:
using   System;
public   delegate   string   daili(string   a,int   b);
namespace   Test{
public   event   daili   shijian;
class   test
{
Result   r   =   new   Result();
shijian+=new   daili(r.test_shijian);//A
shijian+=new   daili(r.printt);//B
}
public   void   Invoke()
{
if(shijian!=null)
{
Console.Write(shijian( "试试! ",12345));
}
}
Class   Result
{
public   string   test_shijian(string   k,int   j)
{
return   k+j.ToString();
}
public   string   printt(string   k,int   j)
{
return   "这里为了与上面那个方法区别开,所以用这些字 ";
}
}  

///以下面是应用了
public   class   Client{

public   static   void   Main(string[]   args)
{
test   i=new   test();
i.Invoke();//触发那个事件。
}
}

我的问题是,调试时每次都只显示一个结果,也就是只显示A或B(他俩哪个在后显示哪一个,这是什么??难道只执行最后的一个??请高手指点)。我在线等您,谢谢,看贴的各位。

------解决方案--------------------
using System;

namespace ConsoleApplication1
{
public delegate void MyDelegate();
public interface I
{
event MyDelegate MyEvent;
void FireAway();
}
public class MyClass:I
{
public event MyDelegate MyEvent;
public void FireAway()
{
if(MyEvent!=null)
MyEvent();
else
Console.WriteLine( "MyEvent failed! ");
}
}
public class MainClass
{
static private void f()
{
Console.WriteLine( "F is called ..................... ");
return;
}
static private void fl()
{
Console.WriteLine( "FL is called ..................... ");
Console.ReadLine();
return;
}
static public void Main()
{
/*
* 可以使用接口定义!
I iMy;
iMy=new MyClass();
iMy.FireAway();
iMy.MyEvent +=new MyDelegate(f);
iMy.MyEvent +=new MyDelegate(fl);
iMy.FireAway();
*/

MyClass i=new MyClass();
i.FireAway();
i.MyEvent +=new MyDelegate(f);
i.MyEvent +=new MyDelegate(fl);
i.FireAway();

}
}
}

------解决方案--------------------
using System;
namespace Test
{
public delegate string daili(string a, int b);

public class test
{
public event daili shijian;
public test()
{
Result r = new Result();
shijian += new daili(r.test_shijian);//A
shijian += new daili(r.printt);//B
}

public void Invoke()
{
if (shijian != null)
{
shijian( "试试! ", 12345);
//Console.WriteLine(shijian( "试试! ", 12345));
}
}
}

public class Result
{
public string test_shijian(string k, int j)
{
Console.WriteLine(k + j.ToString());
return k + j.ToString();
}
public string printt(string k, int j)
{
Console.WriteLine( "这里为了与上面那个方法区别开,所以用这些字 ");
return "这里为了与上面那个方法区别开,所以用这些字 ";