论.NET反射、委托技术与设计模式关系之二

论.NET反射、委托技术与设计模式关系之二,第1张

论.NET反射、委托技术与设计模式关系之二,第2张

委托技术与设计模式
  委托技术是.net引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。

  1、.NET中的委托技术

  .NET运行库支持称为“委托”的引用类型,其作用类似于C++中的函数指针。与函数指针不同,委托实例独立于其封装方法的类,主要是那些方法与委托类型兼容。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于.NET Framework中的事件处理程序和回调函数。

  所有委托都从System.Delegate继承而来并且有一个调用列表,这是在调用委托时所执行方法的一个链接列表。产生的委托可以用匹配的签名引用任何方法,没有为具有返回类型并在调用列表中包含多个方法的委托定义返回值。

  可以使用的委托Cimbine及Remove方法在其调用列表中添加和移除方法。若要调用委托,可使用Invoke方法,或者使用BeginInvoke和EndInvoke方法异步调用委托。委托类的实现由运行库提供,而不由用户代码提供。

  委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。

  委托声明定义一个类,它是从System.Delegate类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成;对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且使用上述同一组参数。

  委托实例的一个有用的属性是它既不知道,也不关心其封装方法所属类的详细信息,对它来说最重要的是这些方法与该委托的类型兼容。即只要方法的返回类型和参数表是相同的,则方法与委托类型兼容,方法的名称不一定要与委托类相同。

  定义和使用委托分为声明、实例化和调用3个步骤。委托用委托声明语法声明,如:

delegate void myDelegate( );

  声明一个名为myDelegate的委托,它不带参数并且不返回任何结果,如:

class Test
{
 static void F( )
 {
  System.Console.WriteLine (“Test.F”);
 }
 static void Main ( )
 {
  myeDelegate d = new myDelegate (F);
  d ( );
 }
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 论.NET反射、委托技术与设计模式关系之二

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情