请输入您要查询的百科知识:

 

词条 delegate
释义

定义

.Net 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。

委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。

委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用。

声明

用于声明委托。委托是一种引用类型,它引用类型的 Shared 方法或对象的实例方法。任何具有匹配参数类型和返回类型的过程均可用来创建此委托类的实例。然后就可以通过委托实例来调用过程。

[ <attrlist> ] [ accessmodifier ] _

[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]

各部分说明

attrlist

可选。应用于此委托的属性列表。多个属性以逗号分隔。必须将属性列表用尖括号(“<”和“>”)括起来。

accessmodifier

可选。指定哪些代码可以访问此委托。可以是如下内容之一:

Public。可以访问声明委托的元素的任何代码都可以访问该委托。

Protected。只有委托的类或派生类中的代码可以访问该委托。

Friend。只有同一程序集中的代码可以访问该委托。

Private。只有声明委托的元素内的代码可以访问该委托。

您可以指定 Protected Friend,以便从此委托的类、某个派生类或同一程序集中的代码进行访问。

Shadows

可选。指定此委托重新声明并隐藏基类中的同名编程元素或重载元素集。可以用其他任何类型的元素来隐藏任何类型的被声明元素。

对于被隐藏的元素来说,从隐藏该元素的派生类无法使用它,除非是从不能访问隐藏元素的位置进行访问。例如,如果 Private 元素隐藏一个基类元素,则无权访问 Private 元素的代码会改为访问基类元素。

Sub

可选项,但是 Sub 或 Function 必须出现。将此过程声明为不返回值的委托 Sub 过程。

Function

可选项,但是 Sub 或 Function 必须出现。将此过程声明为返回值的委托 Function 过程。

name

必选。委托类型的名称;符合标准变量命名规则。

typeparamlist

可选。此委托的类型参数列表。以逗号分隔多个类型参数。必须将类型列表用括号括起来,并用 Of 关键字引入。

parameterlist

可选。调用过程时传递给过程的参数列表。必须将参数列表用括号括起来。

type

在您指定 Function 过程时必选。返回值的数据类型。

备注

Delegate 语句定义委托类的参数类型和返回类型。任何具有匹配参数类型和返回类型的过程均可用来创建此委托类的实例。然后就可以调用委托的 Invoke 方法,通过委托实例调用此过程。

可以在命名空间、模块、类或结构级别声明委托,但不能在过程内声明。

每个委托类都定义一个被传递对象方法规范的构造函数。委托构造函数的参数必须是如下形式的表达式:

AddressOf [expression.]methodname

expression 的编译时类型必须是类或接口的名称,而该类或接口包含签名与委托类的签名相匹配的指定名称的方法。methodname 可以是共享方法,也可以是实例方法。即使为类的默认方法创建了委托,methodname 也不是可选项。

委托和事件

委托非常适合于用作事件(从一个组件就该组件中的更改通知“侦听器”)。

委托与接口

委托和接口的类似之处是,它们都允许分隔规范和实现。多个独立的作者可以生成与一个接口规范兼容的多个实现。类似地,委托指定方法的签名,多个作者可以编写与委托规范兼容的多个方法。何时应使用接口,而何时应使用委托呢?

委托在以下情况下很有用: 调用单个方法。

一个类可能希望有方法规范的多个实现。希望允许使用静态方法实现规范。 希望类似事件的设计模式。

调用方不需要知道或获得在其上定义方法的对象。 实现的提供程序希望只对少数选择组件“分发”规范实现。 需要方便的组合。 接口在以下情况下很有用:

规范定义将调用的一组相关方法。

类通常只实现规范一次。

接口的调用方希望转换为接口类型或从接口类型转换,以获得其他接口或类。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/14 19:27:15