共用方式為


委派語句

用來宣告委派。 委派是參考型別或對象實例方法的參考型 Shared 別。 任何具有相符參數和傳回型別的程式都可以用來建立這個委派類別的實例。 然後,您可以透過委派實例來叫用程式。

語法

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

組件

術語 定義
attrlist 選擇性。 套用至此委派的屬性清單。 多個屬性會以逗號分隔。 您必須以角括弧 (“” 和 “<”) 括住>
accessmodifier 選擇性。 指定哪些程式代碼可以存取委派。 可以是下列其中一項:

- 公用。 任何可以存取宣告委派之項目的程式代碼都可以存取它。
- 受保護。 只有委派類別或衍生類別內的程式碼可以存取它。
- 朋友。 只有相同元件內的程式代碼可以存取委派。
- 私人。 只有宣告委派之專案內的程式代碼可以存取它。

- 受保護的Friend 只有委派類別、衍生類別或相同元件內的程式代碼才能存取委派。
- 私人受保護 只有委派類別或相同元件中衍生類別中的程式代碼可以存取委派。
Shadows 選擇性。 表示這個委派會重新宣告,並在基類中隱藏同名的程式設計專案或一組多載專案。 您可以使用任何其他類型來遮蔽任何類型的宣告專案。

陰影項目無法從遮蔽它的衍生類別內取得,但無法存取陰影專案的位置除外。 例如,如果 Private 專案遮蔽基類專案,則沒有存取專案許可權的程式代碼會改為存取 Private 基類專案。
Sub 選擇性,但 SubFunction 必須出現。 將此程式宣告為不傳回值的委派 Sub 程式。
Function 選擇性,但 SubFunction 必須出現。 將這個程式宣告為傳回值的委派 Function 程式。
name 必須的。 委派類型的名稱;遵循標準變數命名慣例。
typeparamlist 選擇性。 此委派的類型參數清單。 多個類型參數會以逗號分隔。 或者,每個類型參數都可以使用 InOut 泛型修飾詞來宣告 Variant。 您必須將 類型清單 括在括弧中,並以 關鍵詞加以介紹 Of
parameterlist 選擇性。 呼叫程式時傳遞至程序的參數清單。 您必須以括弧括住 參數清單
type 如果您指定程式,則為 Function 必要專案。 傳回值的數據類型。

備註

語句 Delegate 會定義委派類別的參數和傳回型別。 任何具有相符參數和傳回型別的程式都可以用來建立這個委派類別的實例。 然後,接著可以藉由呼叫委派的 Invoke 方法,透過委派實例叫用程式。

委派可以在命名空間、模組、類別或結構層級宣告,但無法在程式中宣告。

每個委派類別都會定義傳遞物件方法規格的建構函式。 委派建構函式的參數必須是方法的參考或 Lambda 表達式。

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

AddressOf [expression.]methodname

expression 的編譯時間類型必須是包含指定名稱方法的類別或介面的名稱,而該方法的簽章需符合委派類別的簽章要求。 methodname可以是共用方法或實例方法。 methodname不是可選的,即使您為類別的預設方法建立委派也是如此。

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

Function([parm As typeparm2 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

另請參閱