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

Definicja

Zwraca filtrowaną tablicę MemberInfo obiektów określonego typu elementu członkowskiego.

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

Bitowa kombinacja wartości wyliczenia, która wskazuje typ elementu członkowskiego do wyszukania.

bindingAttr
BindingFlags

Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.

-lub-

Default , aby zwrócić wartość null.

filter
MemberFilter

Delegat, który wykonuje porównania, zwracając true , jeśli element członkowski aktualnie sprawdzany jest zgodny z elementem filterCriteria i false w inny sposób.

filterCriteria
Object

Kryteria wyszukiwania określające, czy element członkowski jest zwracany w tablicy MemberInfo obiektów.

Pola FieldAttributes, MethodAttributesi MethodImplAttributes mogą być używane w połączeniu z delegatem FilterAttribute dostarczonym przez tę klasę.

Zwraca

Filtrowana tablica MemberInfo obiektów określonego typu elementu członkowskiego.

-lub-

Pusta tablica, jeśli bieżąca Type nie ma elementów członkowskich typu memberType , które spełniają kryteria filtrowania.

Implementuje

Wyjątki

filter to null.

Przykłady

Poniższy przykład znajduje wszystkie składowe w klasie, które spełniają określone kryteria wyszukiwania, a następnie wyświetla dopasowane składowe.

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)

Uwagi

Metoda ta może być zastąpiona przez klasę pochodną.

Elementy członkowskie zawierają właściwości, metody, pola, zdarzenia i tak dalej.

Aby metoda pomyślnie pobrać informacje o elemencie FindMembers członkowskim, bindingAttr argument musi zawierać co najmniej jedną BindingFlags.PublicBindingFlags.NonPublic z BindingFlags.Instance wartości i BindingFlags.Staticoraz .

Następujące BindingFlags flagi filtru mogą służyć do definiowania elementów członkowskich do uwzględnienia w wyszukiwaniu:

  • Określ BindingFlags.Instance , aby uwzględnić członków wystąpienia w wyszukiwaniu.

  • Określ BindingFlags.Static , aby uwzględnić statyczne elementy członkowskie w wyszukiwaniu.

  • Określ BindingFlags.Public , aby uwzględnić członków publicznych w wyszukiwaniu.

  • Określ BindingFlags.NonPublic , aby uwzględnić w wyszukiwaniu członków innych niż publiczne (czyli prywatne, wewnętrzne i chronione elementy członkowskie).

Następujące BindingFlags flagi modyfikatora mogą służyć do zmiany sposobu działania wyszukiwania:

  • BindingFlags.DeclaredOnly aby wyszukać tylko elementy członkowskie zadeklarowane w elemecie Type, a nie na elementach członkowskich, które zostały po prostu odziedziczone.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.

Aby uzyskać inicjator klasy (konstruktor statyczny) przy użyciu tej metody, należy określić BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic w Visual Basic). Inicjator klasy można również pobrać przy użyciu TypeInitializer właściwości .

Jeśli bieżący Type reprezentuje parametr typu typu typu lub metody ogólnej, FindMembers przetwarza wszystkie elementy członkowskie zadeklarowane przez ograniczenie klasy i ograniczenia interfejsu parametru typu.

Argumentem filter może być niestandardowy delegat typu MemberFilterlub może być jednym z następujących wstępnie zdefiniowanych delegatów:

Dotyczy

Zobacz też