Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Retourneert een gefilterde matrix met MemberInfo objecten van het opgegeven lidtype.
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()
Parameters
- memberType
- MemberTypes
Een bitsgewijze combinatie van de opsommingswaarden die het type lid aangeeft waarnaar moet worden gezocht.
- bindingAttr
- BindingFlags
Een bitsgewijze combinatie van de opsommingswaarden die aangeven hoe de zoekopdracht wordt uitgevoerd.
– of –
Default om terug te keren null.
- filter
- MemberFilter
De gemachtigde die de vergelijkingen uitvoert, retourneert true als het lid dat momenteel wordt geïnspecteerd, overeenkomt met de filterCriteria en false anderszins.
- filterCriteria
- Object
De zoekcriteria die bepalen of een lid wordt geretourneerd in de matrix met MemberInfo objecten.
De velden van FieldAttributes, MethodAttributesen MethodImplAttributes kunnen worden gebruikt in combinatie met de FilterAttribute gemachtigde die door deze klasse wordt geleverd.
Retouren
Een gefilterde matrix met MemberInfo objecten van het opgegeven lidtype.
– of –
Een lege matrix als de huidige Type geen leden van het type memberType heeft die voldoen aan de filtercriteria.
Implementeringen
- Kenmerken
Uitzonderingen
filter is null.
Voorbeelden
In het volgende voorbeeld worden alle leden in een klasse gevonden die voldoen aan de opgegeven zoekcriteria en worden vervolgens de overeenkomende leden weergegeven.
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)
Opmerkingen
Deze methode kan worden overschreven door een afgeleide klasse.
Leden bevatten eigenschappen, methoden, velden, gebeurtenissen, enzovoort.
Voor het FindMembers ophalen van lidgegevens moet het bindingAttr argument ten minste één van en BindingFlags.Instance, samen met ten minste één van BindingFlags.StaticBindingFlags.NonPublic en BindingFlags.Public.
De volgende BindingFlags filtervlagmen kunnen worden gebruikt om te definiëren welke leden moeten worden opgenomen in de zoekopdracht:
Geef
BindingFlags.Instanceop om exemplaarleden op te nemen in de zoekopdracht.Geef
BindingFlags.Staticop om statische leden in de zoekopdracht op te nemen.Geef
BindingFlags.Publicop dat openbare leden moeten worden opgenomen in de zoekopdracht.Geef
BindingFlags.NonPublicop dat u niet-openbare leden (dat wil gezegd privé-, interne en beveiligde leden) wilt opnemen in de zoekopdracht.
De volgende BindingFlags wijzigingsvlagmen kunnen worden gebruikt om de werking van de zoekopdracht te wijzigen:
-
BindingFlags.DeclaredOnlyom alleen de leden te doorzoeken die zijn gedeclareerd op de Typeleden die gewoon zijn overgenomen.
Zie System.Reflection.BindingFlags voor meer informatie.
Als u de klasse-initialisatiefunctie (statische constructor) wilt ophalen met deze methode, moet u BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). U kunt de klasse-initializer ook ophalen met behulp van de TypeInitializer eigenschap.
Als de huidige Type een typeparameter van een algemeen type of algemene methode vertegenwoordigt, FindMembers worden alle leden verwerkt die zijn gedeclareerd door de klassebeperking en de interfacebeperkingen van de typeparameter.
Het filter argument kan een aangepaste gemachtigde van het type MemberFilterzijn of kan een van de volgende vooraf gedefinieerde gemachtigden zijn:
Type.FilterAttribute, waarbij eenFieldAttributes, MethodAttributesof MethodImplAttributes bitmasker wordt gebruikt als de
filterCriteriawaarde.Type.FilterName, waarmee een hoofdlettergevoelige vergelijking van elke lidnaam wordt uitgevoerd met de tekenreeks die wordt doorgegeven aan
filterCriteria.Type.FilterNameIgnoreCase, waarmee een niet-hoofdlettergevoelige vergelijking van elke lidnaam wordt uitgevoerd met de tekenreeks die wordt doorgegeven aan
filterCriteria.