一直就对C#的delegate有所耳闻,近阶段看代码时发现很多逻辑都是delegate啊、event的。赶紧对自己充电了,写了些小例子。
个人理解,delegate类似于C++中的函数指针,而event只是delegate的一个特例,先说一下delegate与event的区别,当我们使用event修饰了delegate声明的函数变量时,我们在类外只能通过+=与-=对此变量进行操作,当然了,类内还是可以使用其他的=操作的;而不用event修饰时,在类外允许我们获得该变量,而且也允许其他在可访问性内的操作。好像使用event修饰的推荐使用void返回值函数。
很多人可能之前一直对delegate又是+=又是=,以及new运算符的使用有些疑惑,包括我,今天写了小例子试验了下,发现就像我们队字符串操作使用的这些运算符的含义。我们可以使用new也可以不使用。现在贴一下我的代码。
- //delegate声明类
- using System;
- namespace MarshalTest
- {
- class DelegateEvent
- {
- public delegate void msgEvent(string s);
- public event msgEvent msg;
- private void event1(string str)
- {
- Console.WriteLine("event1" + str);
- }
- private void event2(string str)
- {
- Console.WriteLine("event2" + str);
- }
- public void addEvent()
- {
- msg = event1;
- msg += new msgEvent(event1);
- msg += event2;
- }
- public void console()
- {
- msg("haha");
- msg = new msgEvent(event2);
- }
- }
- }
- //main程序
- using System;
- using System.Runtime.InteropServices;
- namespace MarshalTest
- {
- class Program
- {
- static unsafe void Main(string[] args)
- {
- //测试delegate
- DelegateEvent de = new DelegateEvent();
- //de.msg("");
- de.addEvent();
- de.console();
- de.console();
- Console.ReadKey();
- }
- }
- }
运行后的结果如下:
阅读(1413) | 评论(0) | 转发(0) |