Compartilhar via


Type.GetMember Método

Definição

Obtém os membros especificados do Type atual.

Sobrecargas

GetMember(String)

Pesquisa a propriedade pública com o nome especificado.

GetMember(String, BindingFlags)

Pesquisa os membros especificados usando as restrições de associação especificadas.

GetMember(String, MemberTypes, BindingFlags)

Pesquisa os membros especificados do tipo de membro especificado, usando as restrições de associação especificadas.

GetMember(String)

Pesquisa a propriedade pública com o nome especificado.

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

Parâmetros

name
String

A cadeia de caracteres que contém o nome dos membros públicos a serem obtidos.

Retornos

MemberInfo[]

Uma matriz de objetos MemberInfo que representa os membros públicos com o nome especificado, se encontrado; caso contrário, uma matriz vazia.

Implementações

Exceções

name é null.

Exemplos

O exemplo a seguir exibe todos os membros da String classe que começam com a letra 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

Comentários

A pesquisa de name diferencia maiúsculas de minúsculas. A pesquisa inclui membros de instância pública estática e pública.

Entre os membros estão propriedades, campos, métodos, eventos etc.

O GetMember método não retorna membros em uma ordem específica, como ordem alfabética ou de declaração. O código não deve depender de ordem na qual os membros são retornados, porque essa ordem varia.

Essa sobrecarga de método não encontrará inicializadores de classe (construtor estático). Para encontrar inicializadores de classe, use uma sobrecarga que usa BindingFlags e BindingFlags.Static especifique | BindingFlags.NonPublic ( em BindingFlags.Static Or BindingFlags.NonPublic Visual Basic). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get durante a reflexão em um tipo.

Tipo do membro Estático Não estático
Construtor Não Não
Campo Não Sim. Um campo permanece sempre oculto por nome e assinatura.
Evento Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo.
Método Não Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado Não Não
Propriedade Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo.
  1. Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.

  2. Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade da classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipo comum.

Caso o Type atual represente um tipo genérico construído, este método retorna o MemberInfo com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Caso o Type atual represente um parâmetro de tipo na definição de um tipo genérico ou um método genérico, este método procura membros da restrição de classe ou os membros de Object caso não haja restrição de classe.

Observação

Para métodos genéricos, não inclua os argumentos de tipo em name. Por exemplo, o código do C# GetMember("MyMethod<int>") procura um membro com o nome de texto "MyMethod<int>", e não um método chamado MyMethod que tem um argumento genérico do tipo int.

Confira também

Aplica-se a

GetMember(String, BindingFlags)

Pesquisa os membros especificados usando as restrições de associação especificadas.

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

Parâmetros

name
String

A cadeia de caracteres que contém o nome dos membros a serem obtidos.

bindingAttr
BindingFlags

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é realizada.

  • ou - Default para retornar uma matriz vazia.

Retornos

MemberInfo[]

Uma matriz de objetos MemberInfo que representa os membros públicos com o nome especificado, se encontrado; caso contrário, uma matriz vazia.

Implementações

Exceções

name é null.

Exemplos

O exemplo a seguir exibe todos os membros estáticos públicos myString da classe que começam com a letra 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

Comentários

Este método pode ser substituído por uma classe derivada.

Entre os membros estão propriedades, campos, métodos, eventos etc.

O GetMember método não retorna membros em uma ordem específica, como ordem alfabética ou de declaração. O código não deve depender de ordem na qual os membros são retornados, porque essa ordem varia.

Os seguintes sinalizadores de filtro BindingFlags podem ser usados para definir quais membros devem ser incluídos na pesquisa:

  • Você deve especificar BindingFlags.Instance ou BindingFlags.Static para obter um retorno.

  • Especifique BindingFlags.Public para incluir membros públicos na pesquisa.

  • Especifique BindingFlags.NonPublic para incluir membros não públicos (ou seja, membros particulares, internos e protegidos) na pesquisa.

  • Especifique BindingFlags.FlattenHierarchy para incluir os membros estáticos public e protected acima na hierarquia; os membros estáticos private em classes herdadas não são incluídos.

Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:

  • BindingFlags.IgnoreCase para ignorar o caso de name .

  • BindingFlags.DeclaredOnly para pesquisar apenas os membros declarados no Type , não os membros que foram simplesmente herdados.

Consulte System.Reflection.BindingFlags para obter mais informações.

Para obter o inicializador de classe (construtor estático) usando essa sobrecarga de método, você deve especificar "construtor estático" para e | ( no name BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) para bindingAttr . Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.

Caso o Type atual represente um tipo genérico construído, este método retorna o MemberInfo com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Caso o Type atual represente um parâmetro de tipo na definição de um tipo genérico ou um método genérico, este método procura membros da restrição de classe ou os membros de Object caso não haja restrição de classe.

Observação

Para métodos genéricos, não inclua os argumentos de tipo em name. Por exemplo, o código do C# GetMember("MyMethod<int>") procura um membro com o nome de texto "MyMethod<int>", e não um método chamado MyMethod que tem um argumento genérico do tipo int.

Confira também

Aplica-se a

GetMember(String, MemberTypes, BindingFlags)

Pesquisa os membros especificados do tipo de membro especificado, usando as restrições de associação especificadas.

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

Parâmetros

name
String

A cadeia de caracteres que contém o nome dos membros a serem obtidos.

type
MemberTypes

O valor a ser procurado.

bindingAttr
BindingFlags

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é realizada.

  • ou - Default para retornar uma matriz vazia.

Retornos

MemberInfo[]

Uma matriz de objetos MemberInfo que representa os membros públicos com o nome especificado, se encontrado; caso contrário, uma matriz vazia.

Implementações

Exceções

name é null.

Uma classe derivada deve fornecer uma implementação.

Exemplos

O exemplo a seguir exibe todos os métodos da myString classe que começam com a letra 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

Comentários

Entre os membros estão propriedades, campos, métodos, eventos etc.

O GetMember método não retorna membros em uma ordem específica, como ordem alfabética ou de declaração. O código não deve depender de ordem na qual os membros são retornados, porque essa ordem varia.

Os seguintes sinalizadores de filtro BindingFlags podem ser usados para definir quais membros devem ser incluídos na pesquisa:

  • Você deve especificar BindingFlags.Instance ou BindingFlags.Static para obter um retorno.

  • Especifique BindingFlags.Public para incluir membros públicos na pesquisa.

  • Especifique BindingFlags.NonPublic para incluir membros não públicos (ou seja, membros particulares, internos e protegidos) na pesquisa.

  • Especifique BindingFlags.FlattenHierarchy para incluir os membros estáticos public e protected acima na hierarquia; os membros estáticos private em classes herdadas não são incluídos.

Os seguintes sinalizadores de modificador BindingFlags podem ser usados para alterar como a pesquisa funciona:

  • BindingFlags.IgnoreCase para ignorar o caso de name .

  • BindingFlags.DeclaredOnly para pesquisar apenas os membros declarados no Type , não os membros que foram simplesmente herdados.

Consulte System.Reflection.BindingFlags para obter mais informações.

Para obter o inicializador de classe (construtor estático) usando essa sobrecarga de método, você deve especificar "construtor estático" para , para name e | ( MemberTypes.Constructor no type BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) para bindingAttr . Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.

Caso o Type atual represente um tipo genérico construído, este método retorna o MemberInfo com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Caso o Type atual represente um parâmetro de tipo na definição de um tipo genérico ou um método genérico, este método procura membros da restrição de classe ou os membros de Object caso não haja restrição de classe.

Observação

Para métodos genéricos, não inclua os argumentos de tipo em name. Por exemplo, o código do C# GetMember("MyMethod<int>") procura um membro com o nome de texto "MyMethod<int>", e não um método chamado MyMethod que tem um argumento genérico do tipo int.

Confira também

Aplica-se a