語言

TypeDelegator.InvokeMember 方法

定義

呼叫指定的成員。 要調用的方法必須是可存取的,並且在指定的綁定器和調用屬性限制下,提供與指定參數列表最具體的匹配。

public:
 override System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public override object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

參數

name
String

要引用的議員姓名。 這可以是建構子、方法、屬性或欄位。 若傳遞空字串(“”),則會呼叫預設成員。

invokeAttr
BindingFlags

召喚屬性。 這必須是以下BindingFlags之一:InvokeMethod, , CreateInstance, StaticGetField, SetFieldGetProperty, 或 SetProperty。 必須指定適當的調用屬性。 若要呼叫靜態成員,必須設定該 Static 旗標。

binder
Binder

一個能夠約束、強制參數類型、調用成員,以及透過反射檢索 MemberInfo 物件的物件。 若 binder , null則使用預設的綁定器。 參見 Binder。

target
Object

用來呼叫指定成員的物件。

args
Object[]

一個型別 Object 的陣列,包含要調用成員參數的數量、順序與型別。 若 args 包含未初始化的 Object,則視為空,使用預設綁定器可將 x 擴寬為 0、0.0 或字串。

modifiers
ParameterModifier[]

一個長度與 ParameterModifier相同的類型args陣列,元素代表與要調用成員參數相關的屬性。 參數在成員簽名中具有相關屬性。 對於 ByRef,使用 ParameterModifier.ByRef,對於不使用 ParameterModifier.None。 預設的活頁夾會完全匹配這些。 像 和 In 這類屬性InOut不用於綁定,可用 來查看ParameterInfo。

culture
CultureInfo

一個用來規範類型強制的實例 CultureInfo 。 例如,將代表 1000 的字串轉換成 Double 一個值時,這是必要的,因為不同文化中 1000 的表示方式不同。 若 culture 是 null, CultureInfo 則 用於當前執行緒的 CultureInfo 。

namedParameters
String[]

一個包含參數名稱的字串陣列,從元素零開始與陣 args 列相符。 陣列不能有破洞。 如果 args。 Length 大於 namedParameters。 Length,其餘參數依序填充。

傳回

A Object 代表被調用成員的回傳值。

屬性

備註

當以下兩個條件皆成立時,將呼叫該方法:

  • 方法宣告中的參數數量等於指定參數清單中的參數數(除非成員中有預設參數)。

  • 每個參數的型別可由綁定器轉換為參數型別。

裝訂機會找到所有匹配的方法。 這些方法依據所BindingFlags.MethodInvoke請求的綁定類型(、、 BindingFlags.GetProperties、依此類推)來找到。 方法集合會依據名稱、參數數量及綁定器中定義的搜尋修飾符進行篩選。

選擇方法後,該方法會被啟動。 此時會檢查無障礙性。 搜尋可根據與方法相關的可及性屬性控制搜尋的集合。 方法 Binder.BindToMethod 負責選擇要呼叫的方法。 預設的活頁夾會選擇最具體的配對。

Note

完全信任的程式碼會忽略存取限制。 也就是說,只要程式碼完全信任,私有建構子、方法、欄位和屬性都可以透過反射來存取和調用。

目前,InvokeMember 對每種物件類型執行 Microsoft .NET Framework 的反射語意。

若以名稱指定的成員為陣列,且 BindingFlags.GetField 旗標設於 , invokeAttr陣 args 列指定要回傳的元素值。 例如,以下透過 Type 物件 t 的呼叫會回傳字串陣列 MyArray 的第一個元素值,該元素是呼叫物件的成員:

String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});

你可以用來 InvokeMember 設定成員陣列中的一個或多個元素。 所有元素都設定為相同的值。 args陣列格式必須如下:

{index1,
    index2,, value}

例如,要設定前一個範例中 MyArray 的第一個成員,語法如下:

t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new
    Variant[]{0,"Updated"});

適用於

另請參閱