Condividi tramite


Type.GetMember Metodo

Definizione

Ottiene i membri specificati dell'oggetto Type corrente.

Overload

GetMember(String)

Cerca i membri pubblici con il nome specificato.

GetMember(String, BindingFlags)

Cerca i membri specificati, usando i vincoli di binding specificati.

GetMember(String, MemberTypes, BindingFlags)

Cerca i membri specificati del tipo di membro specificato usando i vincoli di associazione specificati.

GetMember(String)

Cerca i membri pubblici con il nome specificato.

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

Parametri

name
String

Stringa contenente il nome dei membri pubblici da ottenere.

Restituisce

MemberInfo[]

Matrice di oggetti MemberInfo che rappresentano i membri pubblici con il nome specificato, se presenti; in caso contrario, matrice vuota.

Implementazioni

Eccezioni

name è null.

Esempio

Nell'esempio seguente vengono visualizzati tutti i membri String della classe che iniziano con la lettera 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

Commenti

La ricerca di fa name distinzione tra maiuscole e minuscole. La ricerca include membri di istanza statici e pubblici.

I membri includono proprietà, metodi, campi, eventi e così via.

Il metodo non restituisce membri in un ordine particolare, ad esempio l'ordine GetMember alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i membri, perché tale ordine varia.

Questo overload del metodo non troverà gli inizializzatori di classe (costruttore statico). Per trovare gli inizializzatori di classe, usare un overload che accetta BindingFlags e specificare | ( in BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic). È anche possibile ottenere l'inizializzatore di classe usando la TypeInitializer proprietà .

Nella tabella seguente vengono illustrati i membri di una classe di base restituiti dai Get metodi quando si esegue la reflecting su un tipo.

Tipo di membro Static Non statico
Costruttore No No
Campo No Sì. Un campo è sempre hide-by-name-and-signature.
Evento Non applicabile La regola di sistema dei tipi comuni è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito.
Metodo No Sì. Un metodo (virtuale e non virtuale) può essere hide-by-name o hide-by-name-and-signature.
Tipo annidato No No
Proprietà Non applicabile La regola di sistema dei tipi comuni è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito.
  1. Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.

  2. Per la reflection, le proprietà e gli eventi sono hide-by-name-and-signature. Se si dispone di una proprietà con una funzione di accesso get e una funzione di accesso set nella classe di base, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe di base.

  3. Gli attributi personalizzati non fanno parte del sistema di tipi comune.

Se l'oggetto corrente rappresenta un tipo generico costruito, questo metodo restituisce con Type i parametri di tipo MemberInfo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente rappresenta un parametro di tipo nella definizione di un tipo o di un metodo generico, questo metodo cerca nei membri del vincolo di classe o nei membri di se non è presente Type Object alcun vincolo di classe.

Nota

Per i metodi generici, non includere gli argomenti di tipo in name . Ad esempio, il codice C# cerca un membro con il nome di testo " ", anziché un metodo denominato con un GetMember("MyMethod<int>") argomento generico di tipo MyMethod<int> MyMethod int .

Vedi anche

Si applica a

GetMember(String, BindingFlags)

Cerca i membri specificati, usando i vincoli di binding specificati.

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

Parametri

name
String

Stringa contenente il nome dei membri da ottenere.

bindingAttr
BindingFlags

Combinazione bit per bit di valori di enumerazione che specifica il modo in cui viene eseguita la ricerca.

-oppure- Default per restituire una matrice vuota.

Restituisce

MemberInfo[]

Matrice di oggetti MemberInfo che rappresentano i membri pubblici con il nome specificato, se presenti; in caso contrario, matrice vuota.

Implementazioni

Eccezioni

name è null.

Esempio

Nell'esempio seguente vengono visualizzati tutti i membri statici pubblici della myString classe che iniziano con la lettera 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

Commenti

Questo metodo può essere sottoposto a override da una classe derivata.

I membri includono proprietà, metodi, campi, eventi e così via.

Il metodo non restituisce membri in un ordine particolare, ad esempio l'ordine GetMember alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i membri, perché tale ordine varia.

I flag BindingFlags di filtro seguenti possono essere usati per definire i membri da includere nella ricerca:

  • È necessario specificare BindingFlags.Instance o per ottenere un valore BindingFlags.Static restituito.

  • Specificare BindingFlags.Public per includere i membri pubblici nella ricerca.

  • Specificare per includere nella ricerca membri non pubblici, ovvero membri privati, interni BindingFlags.NonPublic e protetti.

  • Specificare BindingFlags.FlattenHierarchy per includere i membri public protected statici e verso l'alto nella gerarchia. I private membri statici nelle classi ereditate non sono inclusi.

Per modificare BindingFlags il funzionamento della ricerca, è possibile usare i flag di modifica seguenti:

  • BindingFlags.IgnoreCase per ignorare la distinzione tra maiuscole e name minuscole.

  • BindingFlags.DeclaredOnly per cercare solo i membri dichiarati in Type , non i membri semplicemente ereditati.

Per altre informazioni, vedere System.Reflection.BindingFlags.

Per ottenere l'inizializzatore di classe (costruttore statico) usando questo overload del metodo, è necessario specificare "costruttore statico" per e | name BindingFlags.Static ( in BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) per bindingAttr . È anche possibile ottenere l'inizializzatore di classe usando la TypeInitializer proprietà .

Se l'oggetto corrente rappresenta un tipo generico costruito, questo metodo restituisce con Type i parametri di tipo MemberInfo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente rappresenta un parametro di tipo nella definizione di un tipo o di un metodo generico, questo metodo cerca nei membri del vincolo di classe o nei membri di se non è presente Type Object alcun vincolo di classe.

Nota

Per i metodi generici, non includere gli argomenti di tipo in name . Ad esempio, il codice C# cerca un membro con il nome di testo " ", anziché un metodo denominato con un GetMember("MyMethod<int>") argomento generico di tipo MyMethod<int> MyMethod int .

Vedi anche

Si applica a

GetMember(String, MemberTypes, BindingFlags)

Cerca i membri specificati del tipo di membro specificato usando i vincoli di associazione specificati.

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

Parametri

name
String

Stringa contenente il nome dei membri da ottenere.

type
MemberTypes

Valore da cercare.

bindingAttr
BindingFlags

Combinazione bit per bit di valori di enumerazione che specifica il modo in cui viene eseguita la ricerca.

-oppure- Default per restituire una matrice vuota.

Restituisce

MemberInfo[]

Matrice di oggetti MemberInfo che rappresentano i membri pubblici con il nome specificato, se presenti; in caso contrario, matrice vuota.

Implementazioni

Eccezioni

name è null.

Una classe derivata deve fornire un'implementazione.

Esempio

Nell'esempio seguente vengono visualizzati tutti i metodi myString della classe che iniziano con la lettera 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

Commenti

I membri includono proprietà, metodi, campi, eventi e così via.

Il metodo non restituisce membri in un ordine particolare, ad esempio l'ordine GetMember alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i membri, perché tale ordine varia.

I flag BindingFlags di filtro seguenti possono essere usati per definire i membri da includere nella ricerca:

  • È necessario specificare BindingFlags.Instance o per ottenere un valore BindingFlags.Static restituito.

  • Specificare BindingFlags.Public per includere i membri pubblici nella ricerca.

  • Specificare per includere nella ricerca membri non pubblici, ovvero membri privati, interni BindingFlags.NonPublic e protetti.

  • Specificare BindingFlags.FlattenHierarchy per includere i membri public protected statici e verso l'alto nella gerarchia. I private membri statici nelle classi ereditate non sono inclusi.

Per modificare BindingFlags il funzionamento della ricerca, è possibile usare i flag di modifica seguenti:

  • BindingFlags.IgnoreCase per ignorare la distinzione tra maiuscole e name minuscole.

  • BindingFlags.DeclaredOnly per cercare solo i membri dichiarati in Type , non i membri semplicemente ereditati.

Per altre informazioni, vedere System.Reflection.BindingFlags.

Per ottenere l'inizializzatore di classe (costruttore statico) usando questo overload del metodo, è necessario specificare "costruttore statico" per , per e name MemberTypes.Constructor | ( in type BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) per bindingAttr . È anche possibile ottenere l'inizializzatore di classe usando la TypeInitializer proprietà .

Se l'oggetto corrente rappresenta un tipo generico costruito, questo metodo restituisce con Type i parametri di tipo MemberInfo sostituiti dagli argomenti di tipo appropriati.

Se l'oggetto corrente rappresenta un parametro di tipo nella definizione di un tipo o di un metodo generico, questo metodo cerca nei membri del vincolo di classe o nei membri di se non è presente Type Object alcun vincolo di classe.

Nota

Per i metodi generici, non includere gli argomenti di tipo in name . Ad esempio, il codice C# cerca un membro con il nome di testo " ", anziché un metodo denominato con un GetMember("MyMethod<int>") argomento generico di tipo MyMethod<int> MyMethod int .

Vedi anche

Si applica a