您的位置:首页 > 编程语言 > C#

C#事件演示程序3)——体会事件更本质的东西

2006-10-10 10:42 330 查看
我在上篇 文章中对事件的分析还是比较片面的。这是昨天晚上回家又仔细研究了一下才发现的。
因为我本来就觉得有些地方还是没弄清楚。比如事件的代理一定是EventHandler或派生类吗?签名必须有参数吗?某个类对事件的注册只能写在类的内部构造函数中吗?不能写在外部吗?其事件处理函数只能是非静态的吗?不能是静态的吗?昨天本以为对事件有了比较全面的认识了,但似乎总觉得哪里不对劲,或者似乎对事件的理解非常死板,思路自己都觉得僵化的很。隐隐带着这些疑问,又参考了一下《C#完全手册》,这些问题迎刃而解。
下面是我写的例子:
A)


using System;


using System.Collections.Generic;


using System.Text;




namespace ConsoleApplication4




...{


public class Program




...{


static void Main(string[] args)




...{


MyEvent myEventIns = MyEvent.Instance;




MyListener Listener = new MyListener();


myEventIns.myEvent += new MyDelegate(Listener.DisplayString);




myEventIns.OnMyEvent();




}


}




public class MyListener




...{


public MyListener()




...{


}


public void DisplayString()




...{


Console.WriteLine("hello!Welcome to my blog!");


}


}




public delegate void MyDelegate();


public class MyEvent




...{


private static MyEvent _instance = new MyEvent();


public static MyEvent Instance




...{




get ...{ return _instance; }


}


private MyEvent()




...{


}


public event MyDelegate myEvent;




public void OnMyEvent()




...{


RaiseMyEvent();


}


private void RaiseMyEvent()




...{


if (myEvent != null)




...{


myEvent();


}


}


}


}



B)把事件处理方法改成静态的:


using System;


using System.Collections.Generic;


using System.Text;




namespace ConsoleApplication4




...{


public class Program




...{


static void Main(string[] args)




...{


MyEvent myEventIns = MyEvent.Instance;


//Listener Listener = new Listener();


myEventIns.myEvent += new MyDelegate(Listener.DisplayString);


myEventIns.OnMyEvent();




}


}




public class Listener




...{


//public Listener()


//{


// MyEvent.Instance.myEvent += new MyDelegate(DisplayString);


//}


//public void DisplayString()


//{


// Console.WriteLine("hello!Welcome to my blog!");


//}


public static void DisplayString()




...{


Console.WriteLine("hello!Welcome to my blog!");


}


}




public delegate void MyDelegate();


public class MyEvent




...{


private static MyEvent _instance = new MyEvent();


public static MyEvent Instance




...{




get ...{ return _instance; }


}


private MyEvent()




...{


}


public event MyDelegate myEvent;




public void OnMyEvent()




...{


RaiseMyEvent();


}


private void RaiseMyEvent()




...{


if (myEvent != null)




...{


myEvent();


}


}


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: