Оператор DelegateDelegate Statement

Используется для объявления делегата.Used to declare a delegate. Делегат — это ссылочный тип, который ссылается на Shared метод типа или метода экземпляра объекта.A delegate is a reference type that refers to a Shared method of a type or to an instance method of an object. Любую процедуру с соответствующими типами параметров и возвращаемого значения можно использовать для создания экземпляра этого класса делегата.Any procedure with matching parameter and return types can be used to create an instance of this delegate class. Процедура может затем быть вызвана через экземпляр делегата.The procedure can then later be invoked by means of the delegate instance.

СинтаксисSyntax

[ <attrlist> ] [ accessmodifier ] _  
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]  

ЧастиParts

ТерминTerm ОпределениеDefinition
attrlist Необязательный параметр.Optional. Список атрибутов, применяемых к этому делегату.List of attributes that apply to this delegate. Несколько атрибутов разделяются запятыми.Multiple attributes are separated by commas. Необходимо заключить список атрибутов в угловые скобки (»<«и»>«).You must enclose the Attribute List in angle brackets ("<" and ">").
accessmodifier Необязательный параметр.Optional. Указывает, какой код может обращаться к делегату.Specifies what code can access the delegate. Ниже указаны доступные значения.Can be one of the following:

- Открытый.- Public. Любой код, который можно получить доступ к элементу, который объявляет делегат можно получить доступ к его.Any code that can access the element that declares the delegate can access it.
- Защищенные.- Protected. Только код внутри класса делегата или производного класса можно получить доступ к его.Only code within the delegate's class or a derived class can access it.
- Дружественные.- Friend. Только код внутри той же сборки можно получить доступ к делегату.Only code within the same assembly can access the delegate.
- Закрытый.- Private. Только код внутри элемента, который объявляет делегат может обращаться к его.Only code within the element that declares the delegate can access it.

- Protected Friend только код внутри класса делегата, производном классе или той же сборке может получить доступ к делегату.- Protected Friend Only code within the delegate's class, a derived class, or the same assembly can access the delegate.
- Частный защищенный только код внутри класса делегата, или в производном классе в одной сборке может получить доступ к делегату.- Private Protected Only code within the delegate's class or in a derived class in the same assembly can access the delegate.
Shadows Необязательный параметр.Optional. Указывает, что этот делегат повторно объявляет и скрывает одинаково названные элементы программирования или набор перегруженных элементов в базовом классе.Indicates that this delegate redeclares and hides an identically named programming element, or set of overloaded elements, in a base class. Можно скрыть любой тип объявленного элемента, используя любой другой тип.You can shadow any kind of declared element with any other kind.

Скрытый элемент недоступен из производного класса, который его скрывает, за исключением тех классов, из которых недоступен скрывающий элемент.A shadowed element is unavailable from within the derived class that shadows it, except from where the shadowing element is inaccessible. Например если Private элемент скрывает элемент базового класса, код, который не имеет разрешения на доступ к Private элемент обращается к элементу базового класса.For example, if a Private element shadows a base class element, code that does not have permission to access the Private element accesses the base class element instead.
Sub Необязательно, но либо Sub или Function должен присутствовать.Optional, but either Sub or Function must appear. Объявляет процедуру представителем Sub процедуру, которая не возвращает значение.Declares this procedure as a delegate Sub procedure that does not return a value.
Function Необязательно, но либо Sub или Function должен присутствовать.Optional, but either Sub or Function must appear. Объявляет процедуру представителем Function процедуры, возвращающей значение.Declares this procedure as a delegate Function procedure that returns a value.
name Обязательный.Required. Имя типа делегата; следует стандартным правилам именования переменных.Name of the delegate type; follows standard variable naming conventions.
typeparamlist Необязательный параметр.Optional. Список параметров типа для этого делегата.List of type parameters for this delegate. Несколько параметров типа разделяются запятыми.Multiple type parameters are separated by commas. При необходимости каждого параметра типа можно объявить как вариант с помощью In и Out универсального модификаторы.Optionally, each type parameter can be declared variant by using In and Out generic modifiers. Необходимо заключить список типов в круглые скобки и введите его с Of ключевое слово.You must enclose the Type List in parentheses and introduce it with the Of keyword.
parameterlist Необязательный параметр.Optional. Список параметров, которые передаются в процедуру при ее вызове.List of parameters that are passed to the procedure when it is called. Необходимо заключить список параметров в круглые скобки.You must enclose the Parameter List in parentheses.
type Обязательно, если Function процедуры.Required if you specify a Function procedure. Тип данных возвращаемого значения.Data type of the return value.

ПримечанияRemarks

Delegate Инструкция определяет типы параметров и возвращаемых классом делегата.The Delegate statement defines the parameter and return types of a delegate class. Для создания экземпляра этого класса делегата можно использовать любую процедуру с соответствующими параметрам и возвращаемым типам.Any procedure with matching parameters and return types can be used to create an instance of this delegate class. Процедура может затем быть вызвана через экземпляр делегата путем вызова делегата Invoke метод.The procedure can then later be invoked by means of the delegate instance, by calling the delegate's Invoke method.

Делегаты можно объявлять в пространства имен, модуля, класса или структуры, но не внутри процедуры.Delegates can be declared at the namespace, module, class, or structure level, but not within a procedure.

Каждый класс делегата определяет конструктор, которому передается спецификация метода объекта.Each delegate class defines a constructor that is passed the specification of an object method. Аргумент конструктора делегата должен быть ссылкой на метод или лямбда-выражение.An argument to a delegate constructor must be a reference to a method, or a lambda expression.

Чтобы указать ссылку на метод, используйте следующий синтаксис:To specify a reference to a method, use the following syntax:

AddressOf [expression.]methodnameAddressOf [expression.]methodname

Тип expression во время компиляции должен представлять собой имя класса или интерфейса, который содержит метод с указанным именем, сигнатура которого соответствует сигнатуре класса делегата.The compile-time type of the expression must be the name of a class or an interface that contains a method of the specified name whose signature matches the signature of the delegate class. methodname должен быть общим методом или методом экземпляра.The methodname can be either a shared method or an instance method. methodname всегда является обязательным, даже если делегат создается для метода по умолчанию в классе.The methodname is not optional, even if you create a delegate for the default method of the class.

Чтобы указать лямбда-выражение, используйте следующий синтаксис:To specify a lambda expression, use the following syntax:

Function ([parm As type, parm2 As type2, ...]) expressionFunction ([parm As type, parm2 As type2, ...]) expression

Сигнатура функции должна соответствовать сигнатуре типа делегата.The signature of the function must match that of the delegate type. Дополнительные сведения о лямбда-выражениях см. в разделе Лямбда-выражения.For more information about lambda expressions, see Lambda Expressions.

и делегатах.For more information about delegates, see Delegates.

ПримерExample

В следующем примере используется Delegate инструкцию, чтобы объявить делегат для работы с двумя числами и возвращает число.The following example uses the Delegate statement to declare a delegate for operating on two numbers and returning a number. DelegateTest Метод принимает экземпляр этого типа делегата и использует его для работы с парой чисел.The DelegateTest method takes an instance of a delegate of this type and uses it to operate on pairs of numbers.

Delegate Function MathOperator( 
    ByVal x As Double, 
    ByVal y As Double 
) As Double

Function AddNumbers( 
    ByVal x As Double, 
    ByVal y As Double 
) As Double
    Return x + y
End Function

Function SubtractNumbers( 
    ByVal x As Double, 
    ByVal y As Double
) As Double
    Return x - y
End Function

Sub DelegateTest( 
    ByVal x As Double, 
    ByVal op As MathOperator, 
    ByVal y As Double 
)
    Dim ret As Double
    ret = op.Invoke(x, y) ' Call the method.
    MsgBox(ret)
End Sub

Protected Sub Test()
    DelegateTest(5, AddressOf AddNumbers, 3)
    DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub

См. такжеSee also