Leer en inglés

Compartir a través de


Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) Método

Definición

Devuelve una matriz filtrada de objetos MemberInfo del tipo del miembro especificado.

C#
public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter? filter, object? filterCriteria);
C#
public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter filter, object filterCriteria);

Parámetros

memberType
MemberTypes

Combinación bit a bit de los valores de enumeración que indica el tipo de miembro por el que se va a buscar.

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 devolver null.

filter
MemberFilter

Delegado que realiza las comparaciones y que devuelve true si el miembro inspeccionado coincide con filterCriteria y false en caso contrario.

filterCriteria
Object

Criterios de búsqueda que determinan si se devuelve un miembro en la matriz de objetos MemberInfo.

Los campos de FieldAttributes, MethodAttributes y MethodImplAttributes se pueden usar junto con el delegado FilterAttribute que esta clase proporciona.

Devoluciones

Matriz filtrada de objetos MemberInfo del tipo del miembro especificado.

o bien

Matriz vacía si el objeto Type actual no tiene miembros del tipo memberType que coincidan con los criterios de filtro.

Implementaciones

Excepciones

filter es null.

Ejemplos

En el ejemplo siguiente se buscan todos los miembros de una clase que coinciden con los criterios de búsqueda especificados y, a continuación, se muestran los miembros coincidentes.

C#
using System;
using System.Reflection;

class MyFindMembersClass
{
    public static void Main()
    {
        Object objTest = new Object();
        Type objType = objTest.GetType ();
        MemberInfo[] arrayMemberInfo;
        try
        {
            //Find all static or public methods in the Object class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method,
                BindingFlags.Public | BindingFlags.Static| BindingFlags.Instance,
                new MemberFilter(DelegateToSearchCriteria),
                "ReferenceEquals");

            for(int index=0;index < arrayMemberInfo.Length ;index++)
                Console.WriteLine ("Result of FindMembers -\t"+ arrayMemberInfo[index].ToString() +"\n");
        }
        catch (Exception e)
        {
            Console.WriteLine ("Exception : " + e.ToString() );
        }
    }
    public static bool DelegateToSearchCriteria(MemberInfo objMemberInfo, Object objSearch)
    {
        // Compare the name of the member function with the filter criteria.
        if(objMemberInfo.Name.ToString() == objSearch.ToString())
            return true;
        else
            return false;
    }
}
/* The example produces the following output:

Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)
*/

Comentarios

Este método se puede invalidar mediante una clase derivada.

Los miembros incluyen propiedades, métodos, campos, eventos, etc.

Para que el método recupere correctamente la FindMembers información de miembro, 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.

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 miembros de instancia en la búsqueda.

  • Especifique BindingFlags.Static para incluir miembros estáticos en la búsqueda.

  • Especifique BindingFlags.Public para incluir miembros públicos en la búsqueda.

  • Especifique BindingFlags.NonPublic que incluya miembros no públicos (es decir, miembros privados, internos y protegidos) en la búsqueda.

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.

Para obtener el inicializador de clase (constructor estático) mediante este 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 parámetro de tipo de un tipo genérico o un método genérico, FindMembers procesa los miembros declarados por la restricción de clase y las restricciones de interfaz del parámetro de tipo.

El filter argumento puede ser un delegado personalizado de tipo MemberFiltero puede ser uno de los siguientes delegados predefinidos:

Se aplica a

Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.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

Consulte también