Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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í null
se .
- 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
, MethodAttributes
a 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.StaticOr
BindingFlags.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ů:
Type.FilterAttribute, která jako hodnotu používá MethodAttributesFieldAttributesbitovou masku .MethodImplAttributes
filterCriteria
Type.FilterName, který porovnává názvy jednotlivých členů s řetězcem předaným do
filterCriteria
.Type.FilterNameIgnoreCase, který provede porovnání názvů jednotlivých členů bez rozlišování velkých a malých písmen s řetězcem předaným do
filterCriteria
.