委托的基本知识
委托是
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#
设计的目的是让用户无须理解底层的委托,可以直接使用他们!