标签:class 类型 bin 分享 事件 发布 线程安全 返回 为知笔记
声明委托类型;
delegate void StringProcessor(string input);
为委托实例的操作找到一个恰当的方法
void PrintString(string x)
完全符合要求
void PrintInteger(int x)
参数类型不兼容
void PrintTwoStrings(string x, string y)
参数个数不匹配
int GetStringLength(string x)
返回类型不匹配
void PrintObject(object x)
C# 1要求完全相同的参数类型,所以虽然string从object派生,仍然不匹配。但是C# 2改善了这个状况。
和参数类型一样,in、out、ref前缀也必须匹配,虽然很少使用。
创建委托实例
至于具体采用哪种形式的表达式来创建委托实例,取决于操作使用实例方法还是静态方法。
StringProcessor proc1, proc2;
proc1 = new StringProcessor(StaticMethods.PrintString);// 静态方法
InstanceMethod instance = new InstanceMethod();
proc2 = new StringProcessor(instance.PrintString);//实例方法
调用委托实例
处理使用C#简化语法的委托实例的调用。
委托的实质是间接完成某种操作。
委托实例实际有一个操作列表,称为委托实例的调用列表。
System.Delegate
类型的静态方法Combine
和Remove
负责创建新的委托实例。很少直接调用,一般使用+/+=和-/-=操作符。
调用委托实例时,它的所有操作顺序执行,Invoke的返回值是最后一个操作的返回值。如果调用列表中的任何操作抛出一个异常,都会阻止执行后续的操作。
事件不是委托类型的字段。事件可以看做类似于属性(本质是方法)。
标签:class 类型 bin 分享 事件 发布 线程安全 返回 为知笔记
原文地址:http://www.cnblogs.com/qianzi067/p/6020318.html