291委托委托是用来处理其他语言(如C++、Pascal和Modula)需用函数指针来处理的情况的。不过与C++函数指针不同,委托是完全面向对象的;另外,C++指针仅指向成员函数,而委托同时封装了对象实例和方法。。委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由该方法和一个相关联的实例组成。对于静态方法,可调用实体仅由一个方法组成。用一个适当的参数集来调用一个委托实例,就是用此给定的参数集来调用该委托实例的每个可调用实体。委托实例的一个有趣且有用的属性是:它不知道也不关心它所封装的方法所属的类;它所关心的仅限于这些方法必须与委托的类型兼容()。这使委托非常适合于“匿名”调用。委托声明delegate-declaration是一种type-declaration(第Error!),它声明一个新的委托类型。delegate-declaration:attributesoptdelegate-modifiersoptdelegatereturn-typeidentifier (formal-parameter-listopt);delegate-modifiers:delegate-modifierdelegate-modifiersdelegate-modifierdelegate-modifier:newpublicprotectedinternalprivate同一修饰符在一个委托声明中多次出现属于编译时错误。new修饰符仅允许在其他类型中声明的委托上使用,在这种情况下该修饰符表示所声明的委托会隐藏具有相同名称的继承成员,详见第Error!。public、protected、internal和private修饰符控制委托类型的可访问性。根据委托声明所在的上下文,可能不允许使用其中某些修饰符(第Error!)。上述的语法产生式中,identifier用于指定委托的类型名称。可选的formal-parameter-list用于指定委托的参数,而return-type则指定委托的返回类型。如果下面两个条件都为真,patible):它们具有相同的参数数目,并且类型相同,顺序相同,参数修饰符也相同。它们的返回类型相同。C#中的委托类型是名称等效的,而不是结构等效的。具体地说,对于两个委托类型,即使它们具有相同的参数列表和返回类型,仍被认为是不同的两个委托类型。不过,这样两个彼此不同的但结构上又相同的委托类型,它们的实例在比较时可以认为是相等关系()。例如:delegateintD1(inti,doubled);classA{ publicstaticintM1(inta,doubleb){...}}classB{ delegateintD2(intc,doubled); publicstaticintM1(intf,doubleg){...} publicstaticvoidM2(int
15 C# 委托 来自淘豆网www.taodocs.com转载请标明出处.