IReflect.InvokeMember 方法

定義

叫用指定成員。

public:
 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 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 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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public 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 引動過程屬性。 invokeAttr 參數可能是建構函式、方法、屬性或欄位。 您必須指定適當的引動過程屬性。 藉由將空字串 ("") 傳遞為成員名稱的方式,叫用類別的預設成員。

binder
Binder

其中一個 BindingFlags 位元旗標。 實作 Binder,包含這個方法的相關屬性。

target
Object

要在其上叫用指定成員的物件。 對於靜態成員來說,會忽略這個參數。

args
Object[]

物件陣列,包含要叫用的成員參數的數目、順序和型別。 如果沒有參數,則這是空陣列。

modifiers
ParameterModifier[]

ParameterModifier 物件的陣列。 這個陣列和 args 參數具有相同的長度,並且表示中繼資料 (Metadata) 中被叫用成員的引數屬性。 參數可以具有下列屬性:pdInpdOutpdRetvalpdOptionalpdHasDefault。 這些分別代表 [In]、[Out]、[retval]、[optional] 和預設參數。 這些屬性是由各種互通性 (Interoperability) 服務所使用。

culture
CultureInfo

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

namedParameters
String[]

參數的字串陣列。

傳回

Object

指定成員。

例外狀況

一個以上的引數會指定給欄位 set

找不到欄位或屬性。

找不到方法。

叫用私用 (Private) 成員,而不使用必要的 ReflectionPermission

範例

下列範例會取得 屬性的值 Now

#using <System.DLL>

using namespace System;
using namespace System::Reflection;

#define NULL 0
void main()
{
   Type^ tDate = Type::GetType( L"System.DateTime" );
   Object^ result = tDate->InvokeMember( L"Now", BindingFlags::GetProperty, nullptr, NULL, gcnew array<Object^>(0) );
   Console::WriteLine( result->ToString() );
}
using System;
using System.Reflection;

public class MainClass
{
    public static void Main(string[] args)
    {
        Type tDate = typeof(System.DateTime);
        Object result = tDate.InvokeMember("Now",
            BindingFlags.GetProperty, null, null, new Object[0]);
        Console.WriteLine(result.ToString());
    }
}
Imports System.Reflection

Public Class MainClass
    Public Overloads Shared Sub Main(ByVal args() As String)
        Dim tDate As Type = GetType(System.DateTime)
        Dim result As [Object] = tDate.InvokeMember("Now", _
            BindingFlags.GetProperty, Nothing, Nothing, New [Object](-1) {})
        Console.WriteLine(result.ToString())
    End Sub
End Class

備註

根據指定繫結器和引動過程屬性的條件約束,所要叫用的方法必須可存取,並提供與指定引數清單最特定的符合項目。

如果方法宣告中的參數數目等於指定引數清單中的引數數目,而且系結器可以將每個引數的類型轉換成參數的類型,就會叫用方法。

注意

傳遞至 InvokeMember 方法的參數修飾詞陣列必須包含單一參數修飾詞。 只有在判斷公開至 COM 時需要以傳址方式傳遞哪個引數時,才會考慮第一個參數修飾詞。

系結器會根據所要求的系結類型,尋找所有相符的方法, BindingFlags.InvokeMethod (、 GetProperties 等等) 。 方法集合會依名稱、引數數目,以及系結器中定義的一組搜尋修飾詞進行篩選。 選取方法之後,就會叫用該方法,並在該時間點檢查協助工具。 搜尋可能會根據與 方法相關聯的協助工具屬性來控制搜尋哪一組方法。 BindToMethod 會選取要叫用的方法。 預設系結器會選取最特定的相符專案。

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

適用於

另請參閱