Ler em inglês

Compartilhar via


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

Definição

Retorna uma matriz filtrada de objetos MemberInfo do tipo do membro 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

Uma combinação bit a bit dos valores de enumeração que indica o tipo de membro a ser pesquisado.

bindingAttr
BindingFlags

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

- ou -

Default para retornar null.

filter
MemberFilter

O delegado que faz as comparações, retornando true se o membro inspecionado no momento corresponder ao filterCriteria. Caso contrário, false.

filterCriteria
Object

Os critérios de pesquisa que determinam se um membro é retornado na matriz de objetos MemberInfo.

Os campos de FieldAttributes, MethodAttributes e MethodImplAttributes podem ser usados em conjunto com o delegado FilterAttribute fornecido por essa classe.

Retornos

Uma matriz filtrada de objetos MemberInfo do tipo de membro especificado.

- ou -

Uma matriz vazia se o Type atual não tiver membros do tipo memberType que correspondam aos critérios de filtro.

Implementações

Exceções

filter é null.

Exemplos

O exemplo a seguir localiza todos os membros em uma classe que correspondem aos critérios de pesquisa especificados e exibe os membros correspondentes.

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)
*/

Comentários

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

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

Para que o FindMembers método recupere informações de membro com êxito, o bindingAttr argumento deve incluir pelo menos um de BindingFlags.Instance e BindingFlags.Static, juntamente com pelo menos um de BindingFlags.NonPublic e BindingFlags.Public.

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

  • Especifique BindingFlags.Instance para incluir membros de instância na pesquisa.

  • Especifique BindingFlags.Static para incluir membros estáticos na pesquisa.

  • 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.

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

  • 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 esse método, você deve especificar BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic no Visual Basic). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.

Se o atual Type representar um parâmetro de tipo de um tipo genérico ou método genérico, FindMembers processará todos os membros declarados pela restrição de classe e as restrições de interface do parâmetro de tipo.

O filter argumento pode ser um delegado personalizado do tipo MemberFilterou pode ser um dos seguintes delegados predefinidos:

Aplica-se a

Produto Versões
.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

Confira também