Type.FindInterfaces(TypeFilter, Object) Methode

Definitie

Retourneert een matrix van Type objecten die een gefilterde lijst met interfaces vertegenwoordigen die zijn geïmplementeerd of overgenomen door de huidige Type.

public:
 virtual cli::array <Type ^> ^ FindInterfaces(System::Reflection::TypeFilter ^ filter, System::Object ^ filterCriteria);
public virtual Type[] FindInterfaces(System.Reflection.TypeFilter filter, object filterCriteria);
abstract member FindInterfaces : System.Reflection.TypeFilter * obj -> Type[]
override this.FindInterfaces : System.Reflection.TypeFilter * obj -> Type[]
Public Overridable Function FindInterfaces (filter As TypeFilter, filterCriteria As Object) As Type()

Parameters

filter
TypeFilter

De gemachtigde die de interfaces vergelijkt met filterCriteria.

filterCriteria
Object

De zoekcriteria die bepalen of een interface moet worden opgenomen in de geretourneerde matrix.

Retouren

Type[]

Een matrix van Type objecten die een gefilterde lijst vertegenwoordigen van de interfaces die zijn geïmplementeerd of overgenomen door de huidige Type, of een lege matrix als er geen interfaces die overeenkomen met het filter worden geïmplementeerd of overgenomen door de huidige Type.

Implementeringen

Uitzonderingen

filter is null.

Er wordt een statische initialisatiefunctie aangeroepen en er wordt een uitzondering gegenereerd.

Voorbeelden

In het volgende voorbeeld wordt de opgegeven interface gevonden die is geïmplementeerd of overgenomen door het opgegeven type en worden vervolgens de interfacenamen weergegeven.

using System;
using System.Xml;
using System.Reflection;

public class MyFindInterfacesSample
{
    public static void Main()
    {
        try
        {
            XmlDocument myXMLDoc = new XmlDocument();
            myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" + "</book>");
            Type myType = myXMLDoc.GetType();

            // Specify the TypeFilter delegate that compares the
            // interfaces against filter criteria.
            TypeFilter myFilter = new TypeFilter(MyInterfaceFilter);
            String[] myInterfaceList = new String[2]
                {"System.Collections.IEnumerable",
                "System.Collections.ICollection"};
            for(int index=0; index < myInterfaceList.Length; index++)
            {
                Type[] myInterfaces = myType.FindInterfaces(myFilter,
                    myInterfaceList[index]);
                if (myInterfaces.Length > 0)
                {
                    Console.WriteLine("\n{0} implements the interface {1}.",
                        myType, myInterfaceList[index]);	
                    for(int j =0;j < myInterfaces.Length;j++)
                        Console.WriteLine("Interfaces supported: {0}.",
                            myInterfaces[j].ToString());
                }
                else
                    Console.WriteLine(
                        "\n{0} does not implement the interface {1}.",
                        myType,myInterfaceList[index]);	
            }
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(TargetInvocationException e)
        {
            Console.WriteLine("TargetInvocationException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }

    public static bool MyInterfaceFilter(Type typeObj,Object criteriaObj)
    {
        if(typeObj.ToString() == criteriaObj.ToString())
            return true;
        else
            return false;
    }
}
open System
open System.Xml
open System.Reflection

let myInterfaceFilter (typeObj: Type) (criteriaObj: obj) =
    string typeObj = string criteriaObj

try
    let myXMLDoc = XmlDocument()
    myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" + "<title>Pride And Prejudice</title>" + "</book>")
    let myType = myXMLDoc.GetType()

    // Specify the TypeFilter delegate that compares the
    // interfaces against filter criteria.
    let myFilter = TypeFilter myInterfaceFilter
    let myInterfaceList =
        [ "System.Collections.IEnumerable"
          "System.Collections.ICollection" ]
    for i in myInterfaceList do
        let myInterfaces = myType.FindInterfaces(myFilter, i)
        if myInterfaces.Length > 0 then
            printfn $"\n{myType} implements the interface {i}."
            for j in myInterfaces do
                printfn $"Interfaces supported: {j}."
        else
            printfn $"\n{myType} does not implement the interface {i}."
with
| :? ArgumentNullException as e ->
    printfn $"ArgumentNullException: {e.Message}"
| :? TargetInvocationException as e ->
    printfn $"TargetInvocationException: {e.Message}"
| e ->
    printfn $"Exception: {e.Message}"

Imports System.Xml
Imports System.Reflection

Public Class MyFindInterfacesSample
    Public Shared Sub Main()
        Try
            Dim myXMLDoc As New XmlDocument()
            myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" _
                & "<title>Pride And Prejudice</title>" & "</book>")
            Dim myType As Type = myXMLDoc.GetType()

            ' Specify the TypeFilter delegate that compares the 
            ' interfaces against filter criteria.
            Dim myFilter As New TypeFilter(AddressOf MyInterfaceFilter)
            Dim myInterfaceList() As String = _
                {"System.Collections.IEnumerable", _
                "System.Collections.ICollection"}
            Dim index As Integer
            For index = 0 To myInterfaceList.Length - 1
                Dim myInterfaces As Type() = _
                    myType.FindInterfaces(myFilter, myInterfaceList(index))
                If myInterfaces.Length > 0 Then
                    Console.WriteLine(ControlChars.Cr & _
                        "{0} implements the interface {1}.", _
                        myType, myInterfaceList(index))
                    Dim j As Integer
                    For j = 0 To myInterfaces.Length - 1
                        Console.WriteLine("Interfaces supported: {0}", _
                            myInterfaces(j).ToString())
                    Next j
                Else
                    Console.WriteLine(ControlChars.Cr & _
                        "{0} does not implement the interface {1}.", _
                        myType, myInterfaceList(index))
                End If
            Next index
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " & e.Message)
        Catch e As TargetInvocationException
            Console.WriteLine("TargetInvocationException: " & e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " & e.Message)
        End Try
    End Sub
    Public Shared Function MyInterfaceFilter(ByVal typeObj As Type, _
        ByVal criteriaObj As [Object]) As Boolean
        If typeObj.ToString() = criteriaObj.ToString() Then
            Return True
        Else
            Return False
        End If
    End Function 'MyInterfaceFilter 
End Class

Opmerkingen

Deze methode kan worden overschreven door een afgeleide klasse.

De Module.FilterTypeName en Module.FilterTypeNameIgnoreCase gedelegeerden die door de System.Reflection.Module klasse worden geleverd, kunnen ook worden gebruikt in plaats van de System.Reflection.TypeFilter gemachtigde.

Alle interfaces die door deze klasse worden geïmplementeerd, worden tijdens de zoekopdracht meegenomen, ongeacht of ze worden gedeclareerd door een basisklasse of deze klasse zelf.

Met deze methode wordt in de basisklassehiërarchie gezocht, waarbij elk van de overeenkomende interfaces wordt geretourneerd die elke klasse implementeert, evenals alle overeenkomende interfaces die elk van deze interfaces implementeert (de transitieve sluiting van de overeenkomende interfaces wordt geretourneerd). Er worden geen dubbele interfaces geretourneerd.

Als de huidige Type een typeparameter vertegenwoordigt in de definitie van een algemeen type of algemene methode, FindInterfaces doorzoekt u alle interfaces die zijn gedeclareerd in de beperkingen van de typeparameter en worden alle interfaces overgenomen via de interfaces die zijn gedeclareerd in de beperkingen. Als de huidige Type een typeargument van een algemeen type vertegenwoordigt, FindInterfaces doorzoekt u alle interfaces die door het type zijn geïmplementeerd, ongeacht of deze overeenkomen met beperkingen.

Note

FindInterfaces kan algemene interfaces retourneren, zelfs bij typen die niet algemeen zijn. Een niet-gegenereerd type kan bijvoorbeeld IEnumerable<int> (IEnumerable(Of Integer) in Visual Basic) implementeren.

Van toepassing op

Zie ook