Sdílet prostřednictvím


Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) Metoda

Definice

Vrátí filtrovanou matici MemberInfo objektů zadaného typu členu.

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ FindMembers(System::Reflection::MemberTypes memberType, System::Reflection::BindingFlags bindingAttr, System::Reflection::MemberFilter ^ filter, System::Object ^ filterCriteria);
public virtual System.Reflection.MemberInfo[] FindMembers (System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter? filter, object? filterCriteria);
public virtual System.Reflection.MemberInfo[] FindMembers (System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter filter, object filterCriteria);
abstract member FindMembers : System.Reflection.MemberTypes * System.Reflection.BindingFlags * System.Reflection.MemberFilter * obj -> System.Reflection.MemberInfo[]
override this.FindMembers : System.Reflection.MemberTypes * System.Reflection.BindingFlags * System.Reflection.MemberFilter * obj -> System.Reflection.MemberInfo[]
Public Overridable Function FindMembers (memberType As MemberTypes, bindingAttr As BindingFlags, filter As MemberFilter, filterCriteria As Object) As MemberInfo()

Parametry

memberType
MemberTypes

Bitové kombinace hodnot výčtu, která označuje typ členu, který chcete vyhledat.

bindingAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují, jak se provádí hledání.

-nebo-

Default a vrátí nullse .

filter
MemberFilter

Delegát, který provádí porovnání, vrátí true , pokud člen, který se právě kontroluje, odpovídá filterCriteria a false jinak.

filterCriteria
Object

Kritéria hledání, která určují, zda je člen vrácen v poli MemberInfo objektů.

Pole FieldAttributes, MethodAttributesa MethodImplAttributes lze použít ve spojení s delegátem FilterAttribute zadaným touto třídou.

Návraty

Filtrované pole MemberInfo objektů zadaného typu členu.

-nebo-

Prázdné pole, pokud proud Type neobsahuje členy typu memberType , které odpovídají kritériím filtru.

Implementuje

Výjimky

filter je null.

Příklady

Následující příklad najde všechny členy ve třídě, které odpovídají zadaným kritériím hledání, a pak zobrazí odpovídající členy.

using namespace System;
using namespace System::Reflection;
ref class MyFindMembersClass
{
public:
   static void Test()
   {
      Object^ objTest = gcnew Object;
      Type^ objType = objTest->GetType();
      array<MemberInfo^>^arrayMemberInfo;
      try
      {
         
         //Find all static or public methods in the Object class that match the specified name.
         arrayMemberInfo = objType->FindMembers( MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::Instance), gcnew MemberFilter( DelegateToSearchCriteria ), "ReferenceEquals" );
         for ( int index = 0; index < arrayMemberInfo->Length; index++ )
            Console::WriteLine( "Result of FindMembers -\t {0}", String::Concat( arrayMemberInfo[ index ], "\n" ) );
      }
      catch ( Exception^ e ) 
      {
         Console::WriteLine( "Exception : {0}", e );
      }

   }

   static bool DelegateToSearchCriteria( MemberInfo^ objMemberInfo, Object^ objSearch )
   {
      
      // Compare the name of the member function with the filter criteria.
      if ( objMemberInfo->Name->Equals( objSearch->ToString() ) )
            return true;
      else
            return false;
   }

};

int main()
{
   MyFindMembersClass::Test();
}
/* The example produces the following output:

Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)
*/
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)
*/
open System.Reflection

let delegateToSearchCriteria (objMemberInfo: MemberInfo) (objSearch: obj) =
    // Compare the name of the member function with the filter criteria.
    string objMemberInfo.Name = string objSearch

let objTest = obj ()
let objType = objTest.GetType ()
try
    //Find all static or public methods in the Object class that match the specified name.
    let arrayMemberInfo = 
        objType.FindMembers(MemberTypes.Method, BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.Instance, MemberFilter delegateToSearchCriteria, "ReferenceEquals")

    for info in arrayMemberInfo do
        printfn $"Result of FindMembers -\t{info}\n"
with e ->
    printfn $"Exception : {e}"

(* The example produces the following output:

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

Imports System.Reflection

Class MyFindMembersClass

    Public Shared Sub Main()
        Dim objTest As New Object()
        Dim objType As Type = objTest.GetType()
        Dim arrayMemberInfo() As MemberInfo
        Try
            'Find all static or public methods in the Object 
            'class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method, _
                              BindingFlags.Public Or BindingFlags.Static _
                              Or BindingFlags.Instance, _
                              New MemberFilter(AddressOf DelegateToSearchCriteria), _
                              "ReferenceEquals")

            Dim index As Integer
            For index = 0 To arrayMemberInfo.Length - 1
                Console.WriteLine("Result of FindMembers -" + ControlChars.Tab + _
                               arrayMemberInfo(index).ToString() + ControlChars.Cr)
            Next index
        Catch e As Exception
            Console.WriteLine("Exception : " + e.ToString())
        End Try
    End Sub

    Public Shared Function DelegateToSearchCriteria _
                            (ByVal objMemberInfo As MemberInfo, _
                             ByVal objSearch As Object) As Boolean
        ' Compare the name of the member function with the filter criteria.
        If objMemberInfo.Name.ToString() = objSearch.ToString() Then
            Return True
        Else
            Return False
        End If
    End Function 'DelegateToSearchCriteria 
End Class
' The example produces the following output:
'
' Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)

Poznámky

Tato metoda může být přepsána odvozenou třídou.

Členy obsahují vlastnosti, metody, pole, události a podobně.

FindMembers Aby metoda úspěšně načetla informace o členechbindingAttr, musí argument obsahovat alespoň jeden z a BindingFlags.Instance , BindingFlags.Staticspolu s alespoň jedním z a BindingFlags.NonPublicBindingFlags.Public.

BindingFlags Následující příznaky filtru lze použít k definování členů, které se mají zahrnout do hledání:

  • Zadejte BindingFlags.Instance , aby se do hledání zahrnuli členové instance.

  • Zadejte BindingFlags.Static , aby se do hledání zahrnuly statické členy.

  • Zadejte BindingFlags.Public , aby se do hledání zahrnuli veřejní členové.

  • Zadejte BindingFlags.NonPublic , aby se do hledání zahrnuli neveřejní členové (tj. soukromé, interní a chráněné členy).

Pomocí následujících BindingFlags modifikačních příznaků můžete změnit fungování vyhledávání:

  • BindingFlags.DeclaredOnly prohledat pouze členy deklarované na Type, nikoli členy, které byly jednoduše zděděny.

Další informace naleznete v tématu System.Reflection.BindingFlags.

Chcete-li získat inicializátor třídy (statický konstruktor) pomocí této metody, musíte zadat BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic v jazyce Visual Basic). Inicializátor třídy můžete také získat pomocí TypeInitializer vlastnosti .

Pokud current Type představuje parametr typu obecného typu nebo obecné metody, FindMembers zpracuje všechny členy deklarované omezením třídy a omezení rozhraní parametru typu.

Argumentem filter může být vlastní delegát typu MemberFilternebo jeden z následujících předdefinovaných delegátů:

Platí pro

Viz také