WEB开发网
开发学院软件开发C语言 委托揭秘 阅读

委托揭秘

 2009-06-10 08:32:08 来源:WEB开发网   
核心提示: 重要提示: System.MulticastDelegate 类继承自 system.Delegate,后者本身继承自System.Object,委托揭秘(3),之所以有两个委托类,是有历史原因的, 字段:_invocationList 类型:System.Object 描述:该字段通常

 重要提示: System.MulticastDelegate 类继承自 system.Delegate,后者本身继承自System.Object。之所以有两个委托类,是有历史原因的,同时也是很遗憾的,FCL中本应只有一个委托类。没有办法,我们需要了解这两个类,因为即使构建的所有委托类型都把MulticastDelegate作为基类,我们仍然会在个别情况下用Delegate类(而不是MulticastDelegate类)定义的方法来处理自己构建的这些委托类型。例如,Delegate 类有两个静态方法,分别名为 Combine 和 Remove 。这两个方法的前面指出它们要取 Delegate 参数。因为委托类型继承自 MulticastDelegate,后者又继承自 Delegate,所以委托类型的实例可以被传入这二个方法。

 委托类有Public可见性,因为委托在源代码中被声明为Public类。我们应该知道,委托类可以在一个类型内部(即嵌套在另一个类型内)或在全局范围内定义。简单地说,因为委托是类,在可以定义类的任何地方,都可以定义委托。

 因为所有委托类型都继承 MulticastDelegate,所以它们都继承了 MulticastDelegate 的字段、属性和方法。在所有这些成员中,有3个非公共字段是最重要的。

 字段:_target

 类型:System.Object

 描述:当委托对象封装一个静态方法时,这个字段为 null。当委托对象封装一个实例方法时,这个字段引用的是调用回调方法是要操作的对象。换而言之,这个字段指名要传给实例方法的隐式 this 参数的值。 

 字段:_methodPtr

 类型:System.IntPtr

 描述:一个内部的整数值,CLR用它标识要回调的方法。

 字段:_invocationList

 类型:System.Object

 描述:该字段通常为null。在构建一个委托链时,它可以引用一个委托数组。

上一页  1 2 3 4 5  下一页

Tags:委托 揭秘

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接