0%

C# 委托和事件

C# 中的委托和事件是理解这门语言的一道坎,这回记一下。本文能多简略就多简略,如果被想真正学习这方面知识不小心被搜索到,请移步其他大神的博客。

委托

并没有脱离开事件写过委托,但是委托确实是可以不和事件一起用的。委托是针对方法的一种归类方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
public delegate void PlayDelegate(string name);

private void PlayBoy(string name) {
Console.WriteLine("Hey "+ name + ", play with me?");
}

private void PlayGirl(String name) {
Console.WriteLine("Hey "+ name + ", play with me?");
}

public void Play(string name, PlayDelegate playMethod) {
playMethod(name);
}

类似于python中的函数名称作为参数传递,只不过更为标准化。

事件

不想搞得太复杂,直接上干货,经典的例子,烧水。

Heater类:

1
2
3
4
5
6
public delegate void BoilHandler(object sender, BoilEventArgs e); 
public event BoilHandler BoilEvent;
public class BoilEventArgs : EventArgs
{
public int temperature { get; set; }
}

以上的代码一般是在事件发出对象的内部写。使用public暴露事件。

Alarm类

1
2
3
public void MakeAlert(object sender, EventArgs e) {
~~~
}

program

1
heater.BoilEvent += MakeAlert;

实际上如果using system;之后,可以用System命名空间下的EventHandler进行操作,看一下MSDN吧,比较详细。

总结

发送者做好委托和事件的设定,包装好参数,事件定义为public,外部暴露后将接收方法注册到事件上,参数与委托中定义的一致。