Delegate 陳述式

用以宣告委派。 委派是一種參考類型,會參考類型的 Shared 方法或物件的執行個體方法。 任何具有相符參數和傳回類型的程序都可用來建立這個委派類別的執行個體。 稍後您可以透過委派執行個體來叫用程序。

語法

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

組件

詞彙 定義
attrlist 選擇性。 套用至此委派的屬性清單。 以逗號分隔多個屬性。 您必須將屬性清單放在角括號中 ("<" 和 ">")。
accessmodifier 選擇性。 指定哪些程式碼可以存取此委派。 可以是下列其中一項:

- Public. 任何程式碼若能存取宣告此委派的元素,便可以存取此委派。
- Protected。 只有在委派的類別或已衍生類別內的程式碼可以存取此委派。
- Friend。 只有相同組件內的程式碼可以存取此委派。
- 私人。 只有宣告此委派的元素內的程式碼可以存取此委派。

- Protected Friend 只有委派的類別、已衍生類別或相同組件內的程式碼可以存取此委派。
- Private Protected 只有相同組件中委派的類別或已衍生類別內的程式碼可以存取此委派。
Shadows 選擇性。 指出這個委派會在基底類別中重新宣告並隱藏相同名稱的程式設計元素,或一組多載元素。 您可以使用任何其他類型遮蔽任何一種已宣告的項目。

無法從遮蔽項目的衍生類別內使用遮蔽的項目,除了從無法存取遮蔽項目的位置以外。 例如,如果 Private 元素會遮蔽基底類別元素,則沒有 Private 元素存取權限的程式碼會改為存取基底類別元素。
Sub (選擇性) 但 SubFunction 必須出現。 將此程序宣告為未傳回值的委派 Sub 程序。
Function (選擇性) 但 SubFunction 必須出現。 將此程序宣告為傳回值的委派 Function 程序。
name 必要。 委派類型的名稱;依照標準變數命名慣例。
typeparamlist 選擇性。 此委派的類型參數清單。 以逗號分隔多個類型參數。 您可以選擇性使用 InOut 泛型修飾詞,將每個類型參數宣告為變體。 您必須以括號括住類型清單,並以 Of 關鍵字導入該清單。
parameterlist 選擇性。 當呼叫程序時傳遞至程序的參數清單。 您必須以括號括住參數清單
type 如果您指定 Function 程序則為必要。 傳回值的資料類型。

備註

Delegate 陳述式定義委派類別的參數和傳回類型。 任何具有相符參數和傳回類型的程序都可用來建立這個委派類別的執行個體。 稍後您可以藉由呼叫委派的 Invoke 方法,來透過委派執行個體叫用程序。

可以在命名空間、模組、類別或結構層級宣告委派,但不能在程序內宣告。

每個委派類別會為傳遞的建構函式定義物件方法的規格。 對委派建構函式的引數必須是對方法的參考或 lambda 運算式。

若要指定對方法的參考,請使用下列語法:

AddressOf [expression.]methodname

expression 的編譯時期型別必須是類別或介面的名稱,而該類別或介面包含其簽章符合委派類別簽章的特定名稱方法。 methodname 可以是共用的方法或執行個體方法。 methodname 不是選擇性的,即使您為類別的預設方法建立了委派也一樣。

若要指定 lambda 運算式,請使用下列語法:

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

函式的簽章必須符合委派型別的簽章。 如需 Lambda 運算式的詳細資訊,請參閱 Lambda 運算式

如需委派的詳細資訊,請參閱委派

範例

下列範例會使用 Delegate 陳述式來宣告委派,以運算兩個數字並傳回一個數字。 DelegateTest 方法會接受此類型委派的執行個體,並用來運算數對的數字。

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

另請參閱