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);
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);
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

引動過程屬性。 這必須是下列其中一個 BindingFlagsInvokeMethodCreateInstanceStaticGetFieldSetField, GetPropertySetProperty。 您必須指定適當的引動過程屬性。 如果要叫用靜態 (Static) 成員,則必須設定 Static 旗標。

binder
Binder

使用反映來啟用繫結、強制引數的類型、成員的引動過程,和擷取 MemberInfo 物件的物件。 如果 bindernull,則會使用預設繫結器。 請參閱 Binder

target
Object

要在其上叫用指定成員的物件。

args
Object[]

Object 型別的陣列,包含要叫用的成員參數的數目、順序和型別。 如果 args 包含未初始化的 Object,則會被視為具有預設繫結器的空字串,可被擴大為 0、0.0 或字串。

modifiers
ParameterModifier[]

args 長度相同的 ParameterModifier 型別陣列,與元素一起時,表示與要叫用之成員引數相關的屬性。 參數在成員的簽章中具有與其相關聯的屬性。 針對 ByRef 要使用 ParameterModifier.ByRef,而 None 則要使用 ParameterModifier.None。 預設繫結器確實與這些相符。 屬性 (例如 InInOut) 不會用於繫結中,且可以使用 ParameterInfo 來檢視。

culture
CultureInfo

CultureInfo 的執行個體,用於管理類型的強制型轉。 例如,要將表示 1000 的字串轉換為 Double 值時,這是必要的,因為 1000 在不同文化特性 (Culture) 中有不同的表示方式。 如果 culturenull,則會使用目前執行緒的 CultureInfoCultureInfo

namedParameters
String[]

字串陣列,包含從元素零開始即與 args 陣列完全相符的參數名稱。 陣列中不能有空白位置。 如果 args. Length 大於 namedParametersLength,則會依序填入其餘的參數。

傳回

Object

Object,表示叫用之成員的傳回值。

備註

如果下列兩個條件都成立,將會叫用方法:

  • 方法宣告中的參數數目等於指定引數清單中的引數數目 (,除非在成員) 上定義預設引數。

  • 系結器可以將每個引數的類型轉換成 參數的類型。

系結器會尋找所有相符的方法。 這些方法是根據要求 (BindingFlags.MethodInvokeBindingFlags.GetProperties 等) 系結類型來找到。 方法集會依名稱、引數數目和系結器中定義的一組搜尋修飾詞進行篩選。

選取 方法之後,將會叫用它。 此時會檢查協助工具。 搜尋可能會根據與 方法相關聯的協助工具屬性來控制搜尋哪一組方法。 方法 Binder.BindToMethod 負責選取要叫用的方法。 預設系結器會選取最特定的相符專案。

注意

完全信任的程式碼會忽略存取限制。 也就是說,每當程式碼完全信任時,都可以使用反映來存取和叫用私人建構函式、方法、欄位和屬性。

目前, 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"});  

適用於

另請參閱