Type.FindInterfaces(TypeFilter, Object) Metoda

Definicja

Zwraca tablicę Type obiektów reprezentujących filtrowaną listę interfejsów implementowanych lub dziedziczone przez bieżący Typeelement .

C#
public virtual Type[] FindInterfaces(System.Reflection.TypeFilter filter, object? filterCriteria);
C#
public virtual Type[] FindInterfaces(System.Reflection.TypeFilter filter, object filterCriteria);

Parametry

filter
TypeFilter

Delegat, który porównuje interfejsy z filterCriteria.

filterCriteria
Object

Kryteria wyszukiwania określające, czy interfejs powinien być uwzględniony w zwracanej tablicy.

Zwraca

Type[]

Tablica Type obiektów reprezentujących filtrowaną listę interfejsów implementowanych lub dziedziczynych przez bieżącą Typetablicę lub pustą tablicę, jeśli żaden interfejs pasujący do filtru nie jest implementowany lub dziedziczony przez bieżący Type.

Implementuje

Wyjątki

filter to null.

Statyczny inicjator jest wywoływany i zgłasza wyjątek.

Przykłady

Poniższy przykład znajduje określony interfejs zaimplementowany lub dziedziczony przez określony typ, a następnie wyświetla nazwy interfejsu.

C#
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;
    }
}

Uwagi

Metoda ta może być zastąpiona przez klasę pochodną.

Delegaci Module.FilterTypeName i dostarczone przez klasę System.Reflection.Module mogą być również używane zamiast delegataSystem.Reflection.TypeFilter.Module.FilterTypeNameIgnoreCase

Wszystkie interfejsy zaimplementowane przez tę klasę są brane pod uwagę podczas wyszukiwania, niezależnie od tego, czy zadeklarowane przez klasę bazową, czy samą klasę.

Ta metoda wyszukuje hierarchię klas bazowych, zwracając każdą z pasujących interfejsów, którą implementuje każda klasa, a także wszystkie pasujące interfejsy implementuje każdy z tych interfejsów (czyli zwracane jest przechodnie zamknięcie pasujących interfejsów). Nie są zwracane żadne zduplikowane interfejsy.

Jeśli bieżący Type reprezentuje parametr typu w definicji typu lub metody ogólnej, FindInterfaces przeszukuje wszystkie interfejsy zadeklarowane w ograniczeniach parametru typu, a wszystkie interfejsy dziedziczone przez interfejsy zadeklarowane w ograniczeniach. Jeśli bieżący Type reprezentuje argument typu typu typu, FindInterfaces przeszukuje wszystkie interfejsy zaimplementowane przez typ, niezależnie od tego, czy są zgodne z ograniczeniami.

Uwaga

FindInterfaces może zwracać interfejsy ogólne, nawet w przypadku typów, które nie są ogólne. Na przykład typ niegenericzny może implementować IEnumerable<int> (IEnumerable(Of Integer) w Visual Basic).

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Zobacz też