Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
, MethodAttributes
i 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.StaticOr
BindingFlags.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:
Type.FilterAttribute, który używa maskiFieldAttributes bitów
filterCriteria
, MethodAttributeslub MethodImplAttributes jako wartości.Type.FilterName, która wykonuje porównanie z uwzględnieniem wielkości liter dla każdej nazwy elementu członkowskiego z ciągiem przekazanym do .
filterCriteria
Type.FilterNameIgnoreCase, który wykonuje porównanie bez uwzględniania wielkości liter dla każdej nazwy elementu członkowskiego z ciągiem przekazanym do .
filterCriteria