Type.GetMember Metoda

Definicja

Pobiera określone elementy członkowskie bieżącego Type .

Przeciążenia

GetMember(String)

Wyszukuje publiczne elementy członkowskie o określonej nazwie.

GetMember(String, BindingFlags)

Wyszukuje określone elementy członkowskie przy użyciu określonych ograniczeń powiązania.

GetMember(String, MemberTypes, BindingFlags)

Wyszukuje określone elementy członkowskie określonego typu składowego przy użyciu określonych ograniczeń powiązania.

GetMember(String)

Wyszukuje publiczne elementy członkowskie o określonej nazwie.

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

Parametry

name
String

Ciąg zawierający nazwę publicznych elementów członkowskich do uzyskania.

Zwraca

MemberInfo[]

Tablica obiektów reprezentujących publiczne elementy członkowskie o określonej nazwie, jeśli zostanie znaleziona; w przeciwnym razie pusta MemberInfo tablica.

Implementuje

Wyjątki

name to null.

Przykłady

W poniższym przykładzie są wyświetlane wszystkie składowe String klasy, które zaczynają się literą 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

Uwagi

W wyszukiwaniu name jest wielkość liter. Wyszukiwanie obejmuje publiczne statyczne i publiczne elementy członkowskie wystąpienia.

Elementy członkowskie zawierają właściwości, metody, pola, zdarzenia i tak dalej.

Metoda GetMember nie zwraca elementów członkowskich w określonej kolejności, takich jak kolejność alfabetyczna lub deklaracja. Kod nie może zależeć od kolejności, w której są zwracane elementy członkowskie, ponieważ kolejność się zmienia.

To przeciążenie metody nie znajdzie inicjatorów klas (konstruktor statyczny). Aby znaleźć inicjatory klasy, użyj przeciążenia, które przyjmuje wartość BindingFlags i | ( w BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic). Możesz również pobrać inicjator klasy przy użyciu TypeInitializer właściwości .

W poniższej tabeli przedstawiono, jakie składowe klasy bazowej są zwracane przez metody Get podczas odzwierciedlania w typie.

Typ elementu członkowskiego Static Niestatyczna
Konstruktor Nie Nie
Pole Nie Tak. Pole jest zawsze ukryte przez nazwę i podpis.
Zdarzenie Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
Metoda Nie Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis.
Typu zagnieżdżony Nie Nie
Właściwość Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
  1. Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.

  2. W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.

  3. Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.

Jeśli bieżący reprezentuje skonstruowany typ ogólny, ta metoda zwraca typ z parametrami typu zastąpionymi odpowiednimi Type MemberInfo argumentami typu.

Jeśli bieżąca reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda przeszukuje składowe ograniczenia klasy lub składowe klasy , jeśli nie ma żadnych Type Object ograniczeń klasy.

Uwaga

W przypadku metod ogólnych nie należy uwzględniać argumentów typu w pliku name . Na przykład kod w języku C# wyszukuje członka o nazwie GetMember("MyMethod<int>") tekstowej " ", a nie dla metody o nazwie , która ma jeden MyMethod<int> ogólny argument typu MyMethod int .

Zobacz też

Dotyczy

GetMember(String, BindingFlags)

Wyszukuje określone elementy członkowskie przy użyciu określonych ograniczeń powiązania.

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

Parametry

name
String

Ciąg zawierający nazwę elementów członkowskich do uzyskania.

bindingAttr
BindingFlags

Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.

-lub- Default , aby zwrócić pustą tablicę.

Zwraca

MemberInfo[]

Tablica obiektów reprezentujących publiczne elementy członkowskie o określonej nazwie, jeśli zostanie znaleziona; w przeciwnym razie pusta MemberInfo tablica.

Implementuje

Wyjątki

name to null.

Przykłady

W poniższym przykładzie są wyświetlane wszystkie publiczne statyczne składowe myString klasy, które zaczynają się literą 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

Uwagi

Metoda ta może być zastąpiona przez klasę pochodną.

Elementy członkowskie zawierają właściwości, metody, pola, zdarzenia i tak dalej.

Metoda GetMember nie zwraca elementów członkowskich w określonej kolejności, takich jak kolejność alfabetyczna lub deklaracja. Kod nie może zależeć od kolejności, w której są zwracane elementy członkowskie, ponieważ kolejność się zmienia.

Następujące BindingFlags flagi filtru mogą służyć do definiowania elementów członkowskich do dołączyć do wyszukiwania:

  • Aby uzyskać zwrot, należy określić wartość lub BindingFlags.Instance BindingFlags.Static .

  • Określ, BindingFlags.Public aby uwzględnić publiczne elementy członkowskie w wyszukiwaniu.

  • Określ, BindingFlags.NonPublic aby uwzględnić niepublicznie członków (czyli członków prywatnych, wewnętrznych i chronionych) w wyszukiwaniu.

  • Określ BindingFlags.FlattenHierarchy dołączanie public i statyczne elementy członkowskie w hierarchii; statyczne protected private składowe w klasach dziedziczonych nie są uwzględniane.

Następujące BindingFlags flagi modyfikujące mogą służyć do zmiany sposobu działania wyszukiwania:

  • BindingFlags.IgnoreCase , aby zignorować przypadek name .

  • BindingFlags.DeclaredOnly wyszukiwanie tylko tych elementów członkowskich zadeklarowanych w Type , a nie tych, które były po prostu dziedziczone.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.

Aby uzyskać inicjator klasy (konstruktor statyczny) przy użyciu tego przeciążenia metody, należy określić "konstruktor statyczny" dla klasy i | ( w name BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) dla . bindingAttr Możesz również pobrać inicjator klasy przy użyciu TypeInitializer właściwości .

Jeśli bieżący reprezentuje skonstruowany typ ogólny, ta metoda zwraca typ z parametrami typu zastąpionymi odpowiednimi Type MemberInfo argumentami typu.

Jeśli bieżąca reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda przeszukuje składowe ograniczenia klasy lub składowe klasy , jeśli nie ma żadnych Type Object ograniczeń klasy.

Uwaga

W przypadku metod ogólnych nie należy uwzględniać argumentów typu w pliku name . Na przykład kod w języku C# wyszukuje członka o nazwie GetMember("MyMethod<int>") tekstowej " ", a nie dla metody o nazwie , która ma jeden MyMethod<int> ogólny argument typu MyMethod int .

Zobacz też

Dotyczy

GetMember(String, MemberTypes, BindingFlags)

Wyszukuje określone elementy członkowskie określonego typu składowego przy użyciu określonych ograniczeń powiązania.

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

Parametry

name
String

Ciąg zawierający nazwę elementów członkowskich do uzyskania.

type
MemberTypes

Wartość do wyszukania.

bindingAttr
BindingFlags

Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.

-lub- Default , aby zwrócić pustą tablicę.

Zwraca

MemberInfo[]

Tablica obiektów reprezentujących publiczne elementy członkowskie o określonej nazwie, jeśli zostanie znaleziona; w przeciwnym razie pusta MemberInfo tablica.

Implementuje

Wyjątki

name to null.

Klasa pochodna musi zapewniać implementację.

Przykłady

W poniższym przykładzie przedstawiono wszystkie metody myString klasy, które zaczynają się od litery 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

Uwagi

Elementy członkowskie zawierają właściwości, metody, pola, zdarzenia i tak dalej.

Metoda GetMember nie zwraca elementów członkowskich w określonej kolejności, takich jak kolejność alfabetyczna lub deklaracja. Kod nie może zależeć od kolejności, w której są zwracane elementy członkowskie, ponieważ kolejność się zmienia.

Następujące BindingFlags flagi filtru mogą służyć do definiowania elementów członkowskich do dołączyć do wyszukiwania:

  • Aby uzyskać zwrot, należy określić wartość lub BindingFlags.Instance BindingFlags.Static .

  • Określ, BindingFlags.Public aby uwzględnić publiczne elementy członkowskie w wyszukiwaniu.

  • Określ, BindingFlags.NonPublic aby uwzględnić niepublicznie członków (czyli członków prywatnych, wewnętrznych i chronionych) w wyszukiwaniu.

  • Określ BindingFlags.FlattenHierarchy dołączanie public i statyczne elementy członkowskie w hierarchii; statyczne protected private składowe w klasach dziedziczonych nie są uwzględniane.

Następujące BindingFlags flagi modyfikujące mogą służyć do zmiany sposobu działania wyszukiwania:

  • BindingFlags.IgnoreCase , aby zignorować przypadek name .

  • BindingFlags.DeclaredOnly wyszukiwanie tylko tych elementów członkowskich zadeklarowanych w Type , a nie tych, które były po prostu dziedziczone.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.

Aby uzyskać inicjator klasy (konstruktor statyczny) przy użyciu tego przeciążenia metody, należy określić "konstruktor statyczny" dla , i | ( w name MemberTypes.Constructor type BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) dla bindingAttr . Możesz również pobrać inicjator klasy przy użyciu TypeInitializer właściwości .

Jeśli bieżący reprezentuje skonstruowany typ ogólny, ta metoda zwraca typ z parametrami typu zastąpionymi odpowiednimi Type MemberInfo argumentami typu.

Jeśli bieżąca reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda przeszukuje składowe ograniczenia klasy lub składowe klasy , jeśli nie ma żadnych Type Object ograniczeń klasy.

Uwaga

W przypadku metod ogólnych nie należy uwzględniać argumentów typu w pliku name . Na przykład kod w języku C# wyszukuje członka o nazwie GetMember("MyMethod<int>") tekstowej " ", a nie dla metody o nazwie , która ma jeden MyMethod<int> ogólny argument typu MyMethod int .

Zobacz też

Dotyczy