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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter? filter, object? filterCriteria);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter? filter, object? filterCriteria);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
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[]
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
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[]
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 člena, který se má vyhledat.
- bindingAttr
- BindingFlags
Bitové kombinace hodnot výčtu, které určují způsob provedení hledání.
nebo
Default
nullvrátit .
- filter
- MemberFilter
Delegát, který provádí porovnání, vrátí true , pokud člen, který je aktuálně zkontrolován, 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 dodaných touto třídou.
Návraty
Filtrované pole MemberInfo objektů zadaného typu členu.
nebo
Prázdné pole, pokud aktuální Type typ neobsahuje členy memberType odpovídající kritériím filtru.
Implementuje
- Atributy
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í shodné členy.
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
Tuto metodu lze přepsat odvozenou třídou.
Členové zahrnují vlastnosti, metody, pole, události atd.
FindMembers Aby metoda úspěšně načetla informace o členech, bindingAttr musí argument obsahovat alespoň jeden z BindingFlags.Instance a BindingFlags.Static, spolu s alespoň jedním z BindingFlags.NonPublic a BindingFlags.Public.
BindingFlags Následující příznaky filtru lze použít k definování členů, které mají být zahrnuty do vyhledávání:
Zadejte
BindingFlags.Instance, aby se do vyhledávání zahrnuli členové instance.Zadejte
BindingFlags.Static, aby se do hledání zahrnuli statické členy.Zadejte
BindingFlags.Public, aby se do hledání zahrnuli veřejné členy.Zadejte
BindingFlags.NonPublic, aby do vyhledávání zahrnuli neveřejné členy (tj. soukromé, interní a chráněné členy).
Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:
-
BindingFlags.DeclaredOnlyhledat pouze členy deklarované na Type, nikoli členy, které byly jednoduše zděděny.
Další informace naleznete na 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 aktuální 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.
Argument filter může být vlastní delegát typu MemberFilternebo může být jedním z následujících předdefinovaných delegátů:
Type.FilterAttribute, který jako hodnotu používá maskuFieldAttributesMethodAttributes nebo MethodImplAttributes bitovou masku
filterCriteria.Type.FilterName, který provádí porovnání s rozlišováním velkých a malých písmen každého názvu člena s řetězcem předaným
filterCriteria.Type.FilterNameIgnoreCase, který provádí porovnání nerozlišující velká a malá písmena každého názvu členu s řetězcem předaným .
filterCriteria