Leggere in inglese

Condividi tramite


Type.FindInterfaces(TypeFilter, Object) Metodo

Definizione

Restituisce una matrice di oggetti Type che rappresenta un elenco filtrato di interfacce implementate o ereditate dall'oggetto Type corrente.

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

Parametri

filter
TypeFilter

Delegato che confronta le interfacce con filterCriteria.

filterCriteria
Object

Criteri di ricerca che determinano se un'interfaccia deve essere inclusa nella matrice restituita.

Restituisce

Type[]

Matrice di oggetti Type che rappresenta un elenco filtrato delle interfacce implementate o ereditate dall'oggetto Type corrente oppure matrice vuota se l'oggetto Type corrente non ha implementato né ereditato interfacce che corrispondono al filtro.

Implementazioni

Eccezioni

filter è null.

Un inizializzatore statico viene richiamato e genera un'eccezione.

Esempio

Nell'esempio seguente viene trovata l'interfaccia specificata implementata o ereditata dal tipo specificato e quindi vengono visualizzati i nomi di interfaccia.

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

Commenti

Questo metodo può essere sottoposto a override da una classe derivata.

I Module.FilterTypeName delegati e Module.FilterTypeNameIgnoreCase forniti dalla System.Reflection.Module classe possono essere usati anche al posto del System.Reflection.TypeFilter delegato.

Tutte le interfacce implementate da questa classe vengono considerate durante la ricerca, indipendentemente dal fatto che sia dichiarata da una classe di base o da questa classe stessa.

Questo metodo esegue una ricerca nella gerarchia della classe di base, restituendo ognuna delle interfacce corrispondenti implementate da ogni classe e tutte le interfacce corrispondenti implementate da ognuna di queste interfacce, ovvero viene restituita la chiusura transitiva delle interfacce corrispondenti. Non vengono restituite interfacce duplicate.

Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, FindInterfaces cerca tutte le interfacce dichiarate nei vincoli sul parametro di tipo e tutte le interfacce ereditate tramite le interfacce dichiarate nei vincoli. Se l'oggetto corrente Type rappresenta un argomento di tipo di un tipo generico, FindInterfaces esegue una ricerca in tutte le interfacce implementate dal tipo, indipendentemente dal fatto che corrispondano o meno ai vincoli.

Nota

FindInterfaces può restituire interfacce generiche, anche su tipi non generici. Ad esempio, un tipo non generico potrebbe implementare IEnumerable<int> (IEnumerable(Of Integer) in Visual Basic).

Si applica a

Prodotto Versioni
.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

Vedi anche