委托的基本知识
委托是 c# 当中类似于函数指针,但是类型安全。
C# 中使用委托:
首先声明委托类型:
Public delegate void Mydelegate(int ms);
和函数的声明是一样的,和函数具有相同的参数和返回值,名称不一样,并且前面加有 delegate 关键字。
创建该委托的一个或者多个实例。
Public void MyProc(int ns);
Mydelegate dlg = new Mydelegate(MyProc);
这样我们举完成了委托的定义和实例化。
委托的匿名方法:
我们的委托的方法可以是不先定义好的,可以直接定义例如:
Delegate string delegateTest(string val);
Static void main()
{
String mid=”,Middle part!”;
delegateTest anonDel = delegate(string param)
{
Param+=mid;
Param+=” and this was added to the string .”;
Return param;
}
Console.writeline(anonDel(“Start of string ”));
}
这样就可以节约代码量!
但是匿名委托需要遵守两个规则:
匿名方法中不能使用跳转语句跳到匿名方法的外部,反之依然,匿名方法的外部也不能跳转到该匿名方法的内部!
多播委托:
前面介绍的委托都只是包含一个方法调用,调用的次数和调用的方法的次数相同,如果有多个方法就需要多次地显示调用这个委托。委托也可以包含多个方法,这种委托就是多委托。如果需要调用多委托,就可以按顺序调用多个方法。为此这种委托的返回值必须是 void ;否则就只能得到委托调用的最后一个方法的结果!
示例:
Delegate void DoubleOp(double value);
Class MainEntryPoint
{
Static void main()
{
DoubleOp operations=new DoubleOp(MathOperations.MultiplayByTwo);
Operations+=new DoubleOp(MathOperations.Square);
}
}
使用委托可以编写上面的代码,下面的也就很好理解了:
DoubleOp operations = MathOperations.MultiplyByTwo;
Operations += MathOperations.Square;
多播委托还可以识别“ - ”“ -= ” ”+””+=” 的等运算符,以便从委托中增加或者删除方法调用!
事件
.Net 把消息封装成事件。一个常见的例子就是用户单击了窗体的按钮后, windows 就会给按钮消息处理函数( windows 过程或者 WndProc )函数发送一个 WM_MOUSECLICK 消息,对于 .Net 来说这样的就是一个 Click 事件!
在基于对象的应用程序的时,需要使用另外一种对象通信的方式,而这个当中使用的就是委托。委托就是应用程序接受消息时封装事件的方式。 C# 设计的目的是让用户无须理解底层的委托,可以直接使用他们!