Type.GetMember 方法

定義

取得目前 Type 的指定成員。

多載

GetMember(String)

搜尋具有指定名稱的公用成員。

GetMember(String, BindingFlags)

使用指定的繫結條件約束搜尋指定的成員。

GetMember(String, MemberTypes, BindingFlags)

使用指定的繫結條件約束,搜尋指定成員類型的指定成員。

GetMember(String)

搜尋具有指定名稱的公用成員。

public:
 cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public System.Reflection.MemberInfo[] GetMember (string name);
member this.GetMember : string -> System.Reflection.MemberInfo[]
abstract member GetMember : string -> System.Reflection.MemberInfo[]
override this.GetMember : string -> System.Reflection.MemberInfo[]
Public Function GetMember (name As String) As MemberInfo()

參數

name
String

字串,包含要取得的公用成員名稱。

傳回

MemberInfo[]

MemberInfo 物件的陣列,代表具有指定名稱的公用成員 (如有找到);否則為空陣列。

實作

例外狀況

namenull

範例

下列範例 String 會顯示以字母 C 為開頭之類別的所有成員。

using namespace System;
using namespace System::Security;
using namespace System::Reflection;

// forward declarations:
void GetMemberInfo();
void GetPublicStaticMemberInfo();
void GetPublicInstanceMethodMemberInfo();
int main()
{
   try
   {
      GetMemberInfo();
      GetPublicStaticMemberInfo();
      GetPublicInstanceMethodMemberInfo();
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "ArgumentNullException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( NotSupportedException^ e ) 
   {
      Console::WriteLine( "NotSupportedException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "SecurityException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}

void GetMemberInfo()
{
   String^ myString = "GetMember_String";
   Type^ myType = myString->GetType();
   
   // Get the members for myString starting with the letter C.
   array<MemberInfo^>^myMembers = myType->GetMember( "C*" );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe member(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}

using System;
using System.Security;
using System.Reflection;

public class MyMemberSample
{
    public static void Main()
    {
        MyMemberSample myClass = new MyMemberSample();
        try
        {
            myClass.GetMemberInfo();
            myClass.GetPublicStaticMemberInfo();	
            myClass.GetPublicInstanceMethodMemberInfo();	
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(NotSupportedException e)
        {
            Console.WriteLine("NotSupportedException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
    }

    public void GetMemberInfo()
    {
        String myString = "GetMember_String";

        Type myType = myString.GetType();
        // Get the members for myString starting with the letter C.
        MemberInfo[] myMembers = myType.GetMember("C*");
        if(myMembers.Length > 0)
        {
            Console.WriteLine("\nThe member(s) starting with the letter C for type {0}:", myType);
            for(int index=0; index < myMembers.Length; index++)
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
        }
        else
        {
            Console.WriteLine("No members match the search criteria.");
        }
    }

Imports System.Security
Imports System.Reflection

Public Class MyMemberSample

    Public Shared Sub Main()
        Dim [myClass] As New MyMemberSample()
        Try
            [myClass].GetMemberInfo()
            [myClass].GetPublicStaticMemberInfo()
            [myClass].GetPublicInstanceMethodMemberInfo()
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As NotSupportedException
            Console.WriteLine("NotSupportedException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As SecurityException
            Console.WriteLine("SecurityException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As Exception
            Console.WriteLine("Exception occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        End Try
    End Sub


    Public Sub GetMemberInfo()
        Dim myString As [String] = "GetMember_String"
        Dim myType As Type = myString.GetType()
        ' Get the members for myString starting with the letter C.
        Dim myMembers As MemberInfo() = myType.GetMember("C*")
        If myMembers.Length > 0 Then
            Console.WriteLine(ControlChars.Cr + "The member(s) starting with the letter C for type {0}:", myType)
            Dim index As Integer
            For index = 0 To myMembers.Length - 1
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
            Next index
        Else
            Console.WriteLine("No members match the search criteria.")
        End If
    End Sub

備註

搜尋會區分 name 大小寫。 搜尋包含公用靜態和公用實例成員。

成員包括屬性、方法、欄位、事件等等。

GetMember方法不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得相依于傳回成員的順序,因為該順序會有所不同。

這個方法多載不會 (靜態的函式) 找到類別初始化運算式。 若要尋找類別初始化運算式,請使用採用的多載, BindingFlags 並指定 BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) 中 | (。 您也可以使用屬性取得類別初始化運算式 TypeInitializer

下表顯示在反映型別時,方法會傳回基類的成員 Get

成員類型 Static 非靜態
建構函式
欄位 可以。 欄位一律會依名稱和簽章進行隱藏。
事件 不適用 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。
方法 可以。 (虛擬和非虛擬) 的方法都可以依名稱或依名稱、依名稱和簽章來隱藏。
巢狀型別
屬性 不適用 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。
  1. 依名稱和簽章會考慮簽章的所有部分,包括自訂修飾詞、傳回類型、參數類型、個 sentinel 和非受控呼叫慣例。 這是二進位比較。

  2. 針對反映,屬性和事件會依名稱和簽章來隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,則衍生類別屬性會隱藏基類屬性,而且您將無法存取基類的 setter。

  3. 自訂屬性不是一般型別系統的一部分。

如果目前的 Type 代表結構化泛型型別,這個方法會傳回, MemberInfo 並以適當的型別引數取代型別參數。

如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,這個方法會搜尋類別條件約束的成員, Object 如果沒有類別條件約束,則會搜尋的成員。

注意

若為泛型方法,請勿在中包含型別引數 name 。 例如,c # 程式碼 GetMember("MyMethod<int>") 會搜尋文字名稱為 "" 的成員 MyMethod<int> ,而不是使用 MyMethod 類型為的泛型引數之名為的方法 int

另請參閱

適用於

GetMember(String, BindingFlags)

使用指定的繫結條件約束搜尋指定的成員。

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public Overridable Function GetMember (name As String, bindingAttr As BindingFlags) As MemberInfo()

參數

name
String

字串,包含要取得的成員名稱。

bindingAttr
BindingFlags

列舉值的位元組合,用來指定搜尋的執行方式。

-或- 要傳回空陣列的 Default

傳回

MemberInfo[]

MemberInfo 物件的陣列,代表具有指定名稱的公用成員 (如有找到);否則為空陣列。

實作

例外狀況

namenull

範例

下列範例 myString 會顯示以字母 C 為開頭之類別的所有公用靜態成員。

void GetPublicStaticMemberInfo()
{
   String^ myString = "GetMember_String_BindingFlag";
   Type^ myType = myString->GetType();
   
   // Get the public static members for the class myString starting with the letter C
   array<MemberInfo^>^myMembers = myType->GetMember( "C*", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static) );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe public static member(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}
public void GetPublicStaticMemberInfo()
{
    String myString = "GetMember_String_BindingFlag";
    Type myType = myString.GetType();
    // Get the public static members for the class myString starting with the letter C.
    MemberInfo[] myMembers = myType.GetMember("C*",
        BindingFlags.Public |BindingFlags.Static);
    if(myMembers.Length > 0)
    {
        Console.WriteLine("\nThe public static member(s) starting with the letter C for type {0}:", myType);
        for(int index=0; index < myMembers.Length; index++)
            Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
    }
    else
    {
        Console.WriteLine("No members match the search criteria.");
    }
}
Public Sub GetPublicStaticMemberInfo()
    Dim myString As [String] = "GetMember_String_BindingFlag"

    Dim myType As Type = myString.GetType()
    ' Get the public static members for the class myString starting with the letter C.
    Dim myMembers As MemberInfo() = myType.GetMember("C*", BindingFlags.Public Or BindingFlags.Static)

    If myMembers.Length > 0 Then
        Console.WriteLine(ControlChars.Cr + "The public static member(s) starting with the letter C for type {0}:", myType)
        Dim index As Integer
        For index = 0 To myMembers.Length - 1
            Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
        Next index
    Else
        Console.WriteLine("No members match the search criteria.")
    End If
End Sub

備註

衍生類別可以覆寫這個方法。

成員包括屬性、方法、欄位、事件等等。

GetMember方法不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得相依于傳回成員的順序,因為該順序會有所不同。

BindingFlags 可以使用下列篩選旗標來定義要包含在搜尋中的成員:

  • 您必須指定或,才能 BindingFlags.Instance BindingFlags.Static 取得傳回。

  • 指定 BindingFlags.Public 要在搜尋中包含公用成員。

  • 指定 BindingFlags.NonPublic 要在搜尋中包含 (的非公用成員,也就是私用、內部和受保護成員) 。

  • 指定 BindingFlags.FlattenHierarchypublic 在階層中包含和 protected 靜態成員; private 不包含繼承類別中的靜態成員。

BindingFlags 可以使用下列修飾詞旗標來變更搜尋的運作方式:

  • BindingFlags.IgnoreCase 忽略的案例 name

  • BindingFlags.DeclaredOnly 表示只搜尋在上宣告的成員 Type ,而不是直接繼承的成員。

如需相關資訊,請參閱 System.Reflection.BindingFlags

若要使用這個方法多載來取得類別初始化運算式 (靜態的函式) ,您必須為指定「靜態函式」 name ,並 BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic 在的 Visual Basic) 中指定 | (bindingAttr 。 您也可以使用屬性取得類別初始化運算式 TypeInitializer

如果目前的 Type 代表結構化泛型型別,這個方法會傳回, MemberInfo 並以適當的型別引數取代型別參數。

如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,這個方法會搜尋類別條件約束的成員, Object 如果沒有類別條件約束,則會搜尋的成員。

注意

若為泛型方法,請勿在中包含型別引數 name 。 例如,c # 程式碼 GetMember("MyMethod<int>") 會搜尋文字名稱為 "" 的成員 MyMethod<int> ,而不是使用 MyMethod 類型為的泛型引數之名為的方法 int

另請參閱

適用於

GetMember(String, MemberTypes, BindingFlags)

使用指定的繫結條件約束,搜尋指定成員類型的指定成員。

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::MemberTypes type, System::Reflection::BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.MemberTypes type, System.Reflection.BindingFlags bindingAttr);
abstract member GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public Overridable Function GetMember (name As String, type As MemberTypes, bindingAttr As BindingFlags) As MemberInfo()

參數

name
String

字串,包含要取得的成員名稱。

type
MemberTypes

要搜尋的值。

bindingAttr
BindingFlags

列舉值的位元組合,用來指定搜尋的執行方式。

-或- 要傳回空陣列的 Default

傳回

MemberInfo[]

MemberInfo 物件的陣列,代表具有指定名稱的公用成員 (如有找到);否則為空陣列。

實作

例外狀況

namenull

衍生類別必須提供實作。

範例

下列範例 myString 會顯示以字母 C 為開頭之類別的所有方法。

void GetPublicInstanceMethodMemberInfo()
{
   String^ myString = "GetMember_String_MemberType_BindingFlag";
   Type^ myType = myString->GetType();
   
   // Get the public instance methods for myString starting with the letter C.
   array<MemberInfo^>^myMembers = myType->GetMember( "C*", MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe public instance method(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}
    public void GetPublicInstanceMethodMemberInfo()
    {
        String myString = "GetMember_String_MemberType_BindingFlag";
        Type myType = myString.GetType();
        // Get the public instance methods for myString starting with the letter C.
        MemberInfo[] myMembers = myType.GetMember("C*", MemberTypes.Method,
            BindingFlags.Public | BindingFlags.Instance);
        if(myMembers.Length > 0)
        {
            Console.WriteLine("\nThe public instance method(s) starting with the letter C for type {0}:", myType);
            for(int index=0; index < myMembers.Length; index++)
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
        }
        else
        {
            Console.WriteLine("No members match the search criteria.");
        }
    }
}
    Public Sub GetPublicInstanceMethodMemberInfo()
        Dim myString As [String] = "GetMember_String_MemberType_BindingFlag"

        Dim myType As Type = myString.GetType()
        ' Get the public instance methods for myString starting with the letter C.
        Dim myMembers As MemberInfo() = myType.GetMember("C*", MemberTypes.Method, BindingFlags.Public Or BindingFlags.Instance)
        If myMembers.Length > 0 Then
            Console.WriteLine(ControlChars.Cr + "The public instance method(s) starting with the letter C for type {0}:", myType)
            Dim index As Integer
            For index = 0 To myMembers.Length - 1
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
            Next index
        Else
            Console.WriteLine("No members match the search criteria.")
        End If
    End Sub
End Class

備註

成員包括屬性、方法、欄位、事件等等。

GetMember方法不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得相依于傳回成員的順序,因為該順序會有所不同。

BindingFlags 可以使用下列篩選旗標來定義要包含在搜尋中的成員:

  • 您必須指定或,才能 BindingFlags.Instance BindingFlags.Static 取得傳回。

  • 指定 BindingFlags.Public 要在搜尋中包含公用成員。

  • 指定 BindingFlags.NonPublic 要在搜尋中包含 (的非公用成員,也就是私用、內部和受保護成員) 。

  • 指定 BindingFlags.FlattenHierarchypublic 在階層中包含和 protected 靜態成員; private 不包含繼承類別中的靜態成員。

BindingFlags 可以使用下列修飾詞旗標來變更搜尋的運作方式:

  • BindingFlags.IgnoreCase 忽略的案例 name

  • BindingFlags.DeclaredOnly 表示只搜尋在上宣告的成員 Type ,而不是直接繼承的成員。

如需相關資訊,請參閱 System.Reflection.BindingFlags

若要使用這個方法多載來取得類別初始化運算式 (靜態的函式) ,您必須 name MemberTypes.Constructor type BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic 在的 Visual Basic) 中 bindingAttr 指定「靜態函式」的、for 和 | (。 您也可以使用屬性取得類別初始化運算式 TypeInitializer

如果目前的 Type 代表結構化泛型型別,這個方法會傳回, MemberInfo 並以適當的型別引數取代型別參數。

如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,這個方法會搜尋類別條件約束的成員, Object 如果沒有類別條件約束,則會搜尋的成員。

注意

若為泛型方法,請勿在中包含型別引數 name 。 例如,c # 程式碼 GetMember("MyMethod<int>") 會搜尋文字名稱為 "" 的成員 MyMethod<int> ,而不是使用 MyMethod 類型為的泛型引數之名為的方法 int

另請參閱

適用於