Leer en inglés

Compartir a través de


Type.GetMembers Método

Definición

Obtiene los miembros (propiedades, métodos, campos, eventos, etc.) del objeto Type actual.

Sobrecargas

GetMembers(BindingFlags)

Cuando se invalida en una clase derivada, busca los miembros definidos para el objeto Type actual y aplica las restricciones de enlace especificadas.

GetMembers()

Devuelve todos los miembros públicos del objeto Type actual.

GetMembers(BindingFlags)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Cuando se invalida en una clase derivada, busca los miembros definidos para el objeto Type actual y aplica las restricciones de enlace especificadas.

C#
public abstract System.Reflection.MemberInfo[] GetMembers(System.Reflection.BindingFlags bindingAttr);

Parámetros

bindingAttr
BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.

O bien

Default para que se devuelva una matriz vacía.

Devoluciones

Matriz de objetos MemberInfo que representa todos los miembros definidos para el objeto Type actual que coincidan con las restricciones de enlace especificadas.

O bien

Matriz vacía si no se han definido miembros para el objeto Type actual o si ninguno de los miembros definidos coincide con las restricciones de enlace.

Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar la sobrecarga del GetMembers(BindingFlags) método para recopilar información sobre todos los miembros de la instancia pública de una clase especificada.

C#

class MyClass
{
   public int myInt = 0;
   public string myString = null;

   public MyClass()
   {
   }
   public void Myfunction()
   {
   }
}

class Type_GetMembers_BindingFlags
{
   public static void Main()
   {
      try
      {
         MyClass MyObject = new MyClass();
         MemberInfo [] myMemberInfo;

         // Get the type of the class 'MyClass'.
         Type myType = MyObject.GetType();

         // Get the public instance members of the class 'MyClass'.
         myMemberInfo = myType.GetMembers(BindingFlags.Public|BindingFlags.Instance);

         Console.WriteLine( "\nThe public instance members of class '{0}' are : \n", myType);
         for (int i =0 ; i < myMemberInfo.Length ; i++)
         {
            // Display name and type of the member of 'MyClass'.
            Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
         }
      }
      catch (SecurityException e)
      {
         Console.WriteLine("SecurityException : " + e.Message );
      }

      //Output:
      //The public instance members of class 'MyClass' are :

      //'Myfunction' is a Method
      //'ToString' is a Method
      //'Equals' is a Method
      //'GetHashCode' is a Method
      //'GetType' is a Method
      //'.ctor' is a Constructor
      //'myInt' is a Field
      //'myString' is a Field
   }
}

Comentarios

Los miembros incluyen propiedades, métodos, constructores, campos, eventos y tipos anidados.

Para que la sobrecarga recupere correctamente la GetMethods(BindingFlags) información del método, el bindingAttr argumento debe incluir al menos uno de BindingFlags.Instance y BindingFlags.Static, junto con al menos uno de BindingFlags.NonPublic y BindingFlags.Public. La única excepción es una llamada de método con BindingFlags.NonPublic, que devuelve información de miembro sobre los tipos anidados.

Las marcas de filtro siguientes BindingFlags se pueden usar para definir qué miembros se van a incluir en la búsqueda:

  • Especifique BindingFlags.Instance para incluir métodos de instancia.

  • Especifique BindingFlags.Static para incluir métodos estáticos.

  • Especifique BindingFlags.Public para incluir métodos públicos en la búsqueda.

  • Especifique BindingFlags.NonPublic para incluir métodos no públicos (es decir, métodos privados, internos y protegidos) en la búsqueda. Solo se devuelven métodos protegidos e internos en clases base; No se devuelven métodos privados en clases base.

  • Especifique BindingFlags.FlattenHierarchy para incluir public y protected miembros estáticos en la jerarquía; private no se incluyen los miembros estáticos de las clases heredadas.

  • Especifique BindingFlags.Default solo para devolver una matriz vacía MethodInfo .

Se pueden usar las marcas modificadores siguientes BindingFlags para cambiar el funcionamiento de la búsqueda:

  • BindingFlags.DeclaredOnly para buscar solo los miembros declarados en Type, no los miembros que simplemente se heredaron.

Vea System.Reflection.BindingFlags para obtener más información.

En .NET 6 y versiones anteriores, el GetMembers método no devuelve miembros en un orden determinado, como orden alfabético o de declaración. El código no debe depender del orden en que se devuelven los miembros, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.

Para obtener el inicializador de clase (constructor estático) mediante esta sobrecarga de método, debe especificar BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic en Visual Basic). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad .

Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los MemberInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados.

Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los miembros de la restricción de clase o en los miembros de si no hay ninguna restricción de Object clase.

Consulte también

Se aplica a

.NET 10 y otras versiones
Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetMembers()

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Devuelve todos los miembros públicos del objeto Type actual.

C#
public System.Reflection.MemberInfo[] GetMembers();

Devoluciones

Matriz de objetos MemberInfo que representa todos los miembros públicos del objeto Type actual.

O bien

Matriz vacía de tipo MemberInfo si el objeto Type actual no tiene miembros públicos.

Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar la sobrecarga del GetMembers() método para recopilar información sobre todos los miembros públicos de una clase especificada.

C#
class MyClass
{
   public int myInt = 0;
   public string myString = null;

   public MyClass()
   {
   }
   public void Myfunction()
   {
   }
}

class Type_GetMembers
{
   public static void Main()
   {
      try
      {
         MyClass myObject = new MyClass();
         MemberInfo[] myMemberInfo;

         // Get the type of 'MyClass'.
         Type myType = myObject.GetType();

         // Get the information related to all public member's of 'MyClass'.
         myMemberInfo = myType.GetMembers();

         Console.WriteLine( "\nThe members of class '{0}' are :\n", myType);
         for (int i =0 ; i < myMemberInfo.Length ; i++)
         {
            // Display name and type of the concerned member.
            Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
         }
      }
      catch(SecurityException e)
      {
         Console.WriteLine("Exception : " + e.Message );
      }
   }
}

Comentarios

Los miembros incluyen propiedades, métodos, constructores, campos, eventos y tipos anidados.

En .NET 6 y versiones anteriores, el GetMembers método no devuelve miembros en un orden determinado, como orden alfabético o de declaración. El código no debe depender del orden en que se devuelven los miembros, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.

Esta sobrecarga de método llama a la sobrecarga del GetMembers(BindingFlags) método , conBindingFlags.InstanceBindingFlags.Static | BindingFlags.Public | (BindingFlags.StaticBindingFlags.PublicOrBindingFlags.InstanceOr en Visual Basic). No encontrará inicializadores de clase (constructores estáticos). Para buscar inicializadores de clase, llame a la GetMembers(BindingFlags) sobrecarga y especifique | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic en Visual Basic). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad .

En la tabla siguiente se muestra qué miembros de una clase base devuelven los Get métodos al reflejar en un tipo.

Tipo de miembro Estático No estático
Constructor No No
Campo No Sí. Un campo siempre se oculta por nombre y firma.
evento No es aplicable La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación.
Método No Sí. Un método (tanto virtual como no virtual) puede ser hide-by-name u hide-by-name-and-signature.
Tipo anidado No No
Propiedad. No es aplicable La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación.
  1. Hide-by-name-and-signature tiene en cuenta todas las partes de la firma, incluidos modificadores personalizados, tipos de valor devuelto, tipos de parámetros, sentinels y convenciones de llamada no administradas. Se trata de una comparación binaria.

  2. Para la reflexión, las propiedades y los eventos son hide-by-name-and-signature. Si tiene una propiedad con un descriptor de acceso get y un set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá tener acceso al establecedor en la clase base.

  3. Los atributos personalizados no forman parte del sistema de tipos común.

Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los MemberInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados.

Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los miembros de la restricción de clase o en los miembros de si no hay ninguna restricción de Object clase.

Consulte también

Se aplica a

.NET 10 y otras versiones
Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1