Freigeben über


Type.GetMember Methode

Definition

Ruft die angegebenen Member des aktuellen Type ab.

Überlädt

GetMember(String)

Sucht die öffentlichen Member mit dem angegebenen Namen.

GetMember(String, BindingFlags)

Sucht die angegebenen Member unter Verwendung der angegebenen Bindungseinschränkungen.

GetMember(String, MemberTypes, BindingFlags)

Sucht die angegebenen Member des angegebenen Membertyps unter Verwendung der angegebenen Bindungseinschränkungen.

GetMember(String)

Sucht die öffentlichen Member mit dem angegebenen Namen.

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

Parameter

name
String

Die Zeichenfolge, die den Namen des abzurufenden öffentlichen Members enthält.

Gibt zurück

MemberInfo[]

Ein Array von MemberInfo-Objekten, die die öffentlichen Member mit dem angegebenen Namen darstellen, sofern gefunden, andernfalls ein leeres Array.

Implementiert

Ausnahmen

name ist null.

Beispiele

Im folgenden Beispiel werden alle Member der -Klasse String angezeigt, die mit dem Buchstaben C beginnen.

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

Hinweise

Bei der Suche nach name wird die Kleinschreibung beachtet. Die Suche umfasst öffentliche statische und öffentliche Instanzmitglieder.

Zu den Membern gehören Eigenschaften, Methoden, Felder, Ereignisse und so weiter.

Die -Methode gibt Keine Elemente in einer bestimmten Reihenfolge zurück, z. B. GetMember alphabetisch oder Deklarations reihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Member zurückgegeben werden, da diese Reihenfolge variiert.

Diese Methodenüberladung findet keine Klasseninitialisierer (statischer Konstruktor). Verwenden Sie zum Suchen von Klasseninitialisierern eine Überladung, die verwendet, und BindingFlags geben Sie | ( in BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic). Sie können den Klasseninitialisierer auch mithilfe der -Eigenschaft TypeInitializer erhalten.

Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Methoden zurückgegeben Get werden, wenn sie einen Typ reflektieren.

Memberart statischen Nicht statisch
Konstruktor Nein Nein
Feld Nein Ja. Ein Feld wird immer nach Name und Signatur ausblendet.
Ereignis Nicht zutreffend Die allgemeine Typsystemregel ist, dass die Vererbung mit der Vererbung der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als "Hide-by-name-and-signature". Siehe Hinweis 2 weiter unten.
Methode Nein Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Name oder Nach Name und Signatur ausblenden sein.
Geschachtelter Typ Nein Nein
Eigenschaft Nicht zutreffend Die allgemeine Typsystemregel ist, dass die Vererbung mit der Vererbung der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als "Hide-by-name-and-signature". Siehe Hinweis 2 weiter unten.
  1. Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwalteter Aufrufkonventionen. Dies ist ein binärer Vergleich.

  2. Für Reflektion werden Eigenschaften und Ereignisse nach Name und Signatur ausblendet. Wenn Sie über eine Eigenschaft mit einem get- und einem set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen get-Accessor verfügt, blendet die abgeleitete Klasseneigenschaft die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter in der Basisklasse zugreifen.

  3. Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.

Wenn der aktuelle einen konstruierten generischen Typ darstellt, gibt diese Methode die zurück, bei der die Typparameter durch die Type MemberInfo entsprechenden Typargumente ersetzt wurden.

Wenn der aktuelle einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, durchsucht diese Methode die Member der Klasseneinschränkung oder die Member von , wenn keine Klasseneinschränkung Type Object besteht.

Hinweis

Schließen Sie bei generischen Methoden die Typargumente nicht in name ein. Der C#-Code sucht beispielsweise nach einem Member mit dem Textnamen " ", anstatt nach einer Methode namens , die über ein generisches Argument vom GetMember("MyMethod<int>") MyMethod<int> Typ MyMethod int verfügt.

Siehe auch

Gilt für

GetMember(String, BindingFlags)

Sucht die angegebenen Member unter Verwendung der angegebenen Bindungseinschränkungen.

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

Parameter

name
String

Die Zeichenfolge, die den Namen der abzurufenden Member enthält.

bindingAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.

- oder - Default, um ein leeres Array zurückzugeben.

Gibt zurück

MemberInfo[]

Ein Array von MemberInfo-Objekten, die die öffentlichen Member mit dem angegebenen Namen darstellen, sofern gefunden, andernfalls ein leeres Array.

Implementiert

Ausnahmen

name ist null.

Beispiele

Im folgenden Beispiel werden alle öffentlichen statischen Member der -Klasse myString angezeigt, die mit dem Buchstaben C beginnen.

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

Hinweise

Diese Methode kann von einer abgeleiteten Klasse überschrieben werden.

Zu den Membern gehören Eigenschaften, Methoden, Felder, Ereignisse und so weiter.

Die -Methode gibt Keine Elemente in einer bestimmten Reihenfolge zurück, z. B. GetMember alphabetisch oder Deklarations reihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Member zurückgegeben werden, da diese Reihenfolge variiert.

Die folgenden BindingFlags Filterflags können verwendet werden, um zu definieren, welche Member in die Suche enthalten sein sollen:

  • Sie müssen entweder oder BindingFlags.Instance BindingFlags.Static angeben, um eine Rückgabe zu erhalten.

  • Geben BindingFlags.Public Sie an, dass öffentliche Member in die Suche enthalten sein soll.

  • Geben Sie an, dass nicht öffentliche Member (d. h. private, interne und BindingFlags.NonPublic geschützte Member) in die Suche enthalten sind.

  • Geben BindingFlags.FlattenHierarchy Sie an, public dass und statische Elemente in die Hierarchie eingeschlossen werden protected sollen. private Statische Elemente in geerbten Klassen sind nicht enthalten.

Die folgenden BindingFlags Modifiziererflags können verwendet werden, um die Funktionsweise der Suche zu ändern:

  • BindingFlags.IgnoreCase , um den Fall von zu name ignorieren.

  • BindingFlags.DeclaredOnly , um nur die Member zu durchsuchen, die auf der deklariert sind, nicht die Type Elemente, die einfach geerbt wurden.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Um den Klasseninitialisierer (statischer Konstruktor) mithilfe dieser Methodenüberladung zu erhalten, müssen Sie "statischer Konstruktor" für und | name BindingFlags.Static ( in BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) für bindingAttr angeben. Sie können den Klasseninitialisierer auch mithilfe der -Eigenschaft TypeInitializer erhalten.

Wenn der aktuelle einen konstruierten generischen Typ darstellt, gibt diese Methode die zurück, bei der die Typparameter durch die Type MemberInfo entsprechenden Typargumente ersetzt wurden.

Wenn der aktuelle einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, durchsucht diese Methode die Member der Klasseneinschränkung oder die Member von , wenn keine Klasseneinschränkung Type Object besteht.

Hinweis

Schließen Sie bei generischen Methoden die Typargumente nicht in name ein. Der C#-Code sucht beispielsweise nach einem Member mit dem Textnamen " ", anstatt nach einer Methode namens , die über ein generisches Argument vom GetMember("MyMethod<int>") MyMethod<int> Typ MyMethod int verfügt.

Siehe auch

Gilt für

GetMember(String, MemberTypes, BindingFlags)

Sucht die angegebenen Member des angegebenen Membertyps unter Verwendung der angegebenen Bindungseinschränkungen.

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

Parameter

name
String

Die Zeichenfolge, die den Namen der abzurufenden Member enthält.

type
MemberTypes

Der zu suchende Wert.

bindingAttr
BindingFlags

Eine bitweise Kombination der Enumerationswerte, die angeben, wie die Suche durchgeführt wird.

- oder - Default, um ein leeres Array zurückzugeben.

Gibt zurück

MemberInfo[]

Ein Array von MemberInfo-Objekten, die die öffentlichen Member mit dem angegebenen Namen darstellen, sofern gefunden, andernfalls ein leeres Array.

Implementiert

Ausnahmen

name ist null.

Eine abgeleitete Klasse muss eine Implementierung bereitstellen.

Beispiele

Im folgenden Beispiel werden alle Methoden der myString -Klasse angezeigt, die mit dem Buchstaben C beginnen.

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

Hinweise

Zu den Membern gehören Eigenschaften, Methoden, Felder, Ereignisse und so weiter.

Die -Methode gibt Keine Elemente in einer bestimmten Reihenfolge zurück, z. B. GetMember alphabetisch oder Deklarations reihenfolge. Ihr Code darf nicht von der Reihenfolge abhängen, in der Member zurückgegeben werden, da diese Reihenfolge variiert.

Die folgenden BindingFlags Filterflags können verwendet werden, um zu definieren, welche Member in die Suche enthalten sein sollen:

  • Sie müssen entweder oder BindingFlags.Instance BindingFlags.Static angeben, um eine Rückgabe zu erhalten.

  • Geben BindingFlags.Public Sie an, dass öffentliche Member in die Suche enthalten sein soll.

  • Geben Sie an, dass nicht öffentliche Member (d. h. private, interne und BindingFlags.NonPublic geschützte Member) in die Suche enthalten sind.

  • Geben BindingFlags.FlattenHierarchy Sie an, public dass und statische Elemente in die Hierarchie eingeschlossen werden protected sollen. private Statische Elemente in geerbten Klassen sind nicht enthalten.

Die folgenden BindingFlags Modifiziererflags können verwendet werden, um die Funktionsweise der Suche zu ändern:

  • BindingFlags.IgnoreCase , um den Fall von zu name ignorieren.

  • BindingFlags.DeclaredOnly , um nur die Member zu durchsuchen, die auf der deklariert sind, nicht die Type Elemente, die einfach geerbt wurden.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Um den Klasseninitialisierer (statischer Konstruktor) mithilfe dieser Methodenüberladung zu erhalten, müssen Sie den "statischen Konstruktor" für , für und | name MemberTypes.Constructor ( in type BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) für bindingAttr angeben. Sie können den Klasseninitialisierer auch mithilfe der -Eigenschaft TypeInitializer erhalten.

Wenn der aktuelle einen konstruierten generischen Typ darstellt, gibt diese Methode die zurück, bei der die Typparameter durch die Type MemberInfo entsprechenden Typargumente ersetzt wurden.

Wenn der aktuelle einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, durchsucht diese Methode die Member der Klasseneinschränkung oder die Member von , wenn keine Klasseneinschränkung Type Object besteht.

Hinweis

Schließen Sie bei generischen Methoden die Typargumente nicht in name ein. Der C#-Code sucht beispielsweise nach einem Member mit dem Textnamen " ", anstatt nach einer Methode namens , die über ein generisches Argument vom GetMember("MyMethod<int>") MyMethod<int> Typ MyMethod int verfügt.

Siehe auch

Gilt für