Show/Hide Toolbars

XSharp

用途

向编译器声明一个委托。

语法

 [Attributes] [Modifiers] DELEGATE <idDelegate>

 [Typeparameters]

 [([<idParam> [AS | REF|OUT|IN <idType>] [, ...])]

 [AS <idType>]

 [TypeparameterConstraints]

参数

Attributes一个可选的特性列表,用于描述实体的元信息,例如在 MsTest 类库中包含测试的方法/函数上的 [TestMethod] 属性。请注意,当特性写在关键字上方的行时,特性必须在同一行或以分号结尾。

 

Modifiers一个可选的修饰符列表,用于指定实体的可见性或范围,例如:PUBLIC, PROTECTED, HIDDEN, INTERNAL, SEALED, ABSTRACT 或 STATIC.

 

<idDelegate>委托的有效标识符名称。 委托名称在名称空间内必须是唯一的。

 

<idParam>参数变量。 以这种方式指定的变量会自动声明为局部变量。 这些变量也称为形参(形式参数),用于接收调用实体时传递的参数。

 

AS | REF | OUT | IN <idType>指定参数变量的数据类型(称为强类型)。 AS 表示参数必须通过值传递,REF 表示参数必须通过带 @ 操作符的引用传递。OUT 是一种特殊的 REF 参数,不必在调用前赋值,必须在实体内部赋值。IN 参数作为 READONLY 引用传递。
列表中的最后一个参数也可以声明为 PARAMS <idType>[] ,这将告诉编译器函数/方法可以接收零个或多个可选参数。
使用 CLIPPER 调用约定的函数或方法将被编译为一个带有单个参数的函数,该参数被声明为 Args PARAMS USUAL[] 。
AS <idType>指定数据类型。如果省略,编译器依据编译选项来决定数据类型,或者是 USUAL,或者是由编译器自行决定。

 

TypeParameterConstraints在这里,您可以为类型参数指定约束,例如 WHERE T IS SomeName 或 WHERE T IS New。

描述

委托是一种封装函数或方法的引用类型。委托类似于 Visual Objects、C 和 C++ 等本地代码语言中的函数指针,但与函数指针不同的是,委托是面向对象的、安全的和类型安全的。

DELEGATE 语句声明了一种特殊类型的类,它部分由编译器实现,部分由 CLR 实现。所有委托类都继承自 System.MulticastDelegate。

每个委托都有一个签名,它是其参数和返回值类型的组合。

实例

您可以明确地调用委托构造函数,例如

f := MyDelegate{ NULL, @SomeClass.Test() }

对于静态方法

f := MyDelegate{ SELF, @SomeClass.Test() }

对于实例方法,也可以这样写:

f := SomeClass.Test

对于静态方法

f := SELF:Test

示例

DELEGATE MyDelegate( x AS STRING ) AS STRING