c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
2010-08-21 16:23
477 查看
原文地址:[学习笔记]c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
参考资料:
1.
2.
3.
4.
5.
6.
7.
8.
事件的一个综合性的例子:
说明:
由于本文内容比较杂,前边的叙述部分只是破碎条目的聚合,没有逻辑连贯性。请仔细阅读最后的observer设计模式范例的注释,一切尽在注释中了。
委托
委托保持方法的引用
只有与某委托具有相同签名的方法才能被该委托引用。
委托示例一:
//定义一个委托,该委托的签名是:返回int,接受两个参数,一个string一个bool delegateintSomeDelegate(strings,boolb); //实例化这个委托。 ClassMyClass{ [code] //定义一个函数,该函数与SomeDelegate委托具有相同的签名。 privatestaticintSomeFunction(stringstr,boolbln){ //Dosomethinghere. }publicintSomeFunction2(stringstr,boolbln){ //Dosomethinghere. }
publicstaticvoidmain(){
[/code]
SomeDelegatesd;
sd=newSomeDelegate(SomeFunction);//给委托赋值方法之一
sd=SomeFunction;//匿名委托,直接用方法名赋值,不用先new一个SomeDelegate
sd+=SomeFunction;//对委托绑定方法
sd+=newMyClass().SomeFunction2;//非静态方法。
}
}
匿名委托的常见例子:
this.button1.Click+=newEventHandler(button1_Click);但有时候我们也可以匿名地写成这样:
this.button1.Click+=button1_Click;
委托的一些总结:
使用+=进行绑定之前必须先使用=给委托赋值,否则会出现“使用了未赋值的局部变量”的编译错误。"可以将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其绑定的方法。
不管之前这个委托绑定了多少函数,只要一进行赋值,原来绑定的和赋值的方法都被冲掉了。
在委托被赋值(值为某个函数名)之后,程序中凡是该函数名出现的地方,都可以用这个委托代替。