英語で読む

次の方法で共有


Type.FindInterfaces(TypeFilter, Object) メソッド

定義

現在の Type によって実装または継承されているインターフェイスのフィルター適用済みリストを表す、Type オブジェクトの配列を返します。

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

パラメーター

filter
TypeFilter

インターフェイスを filterCriteria と比較するデリゲート。

filterCriteria
Object

返される配列に、検出したインターフェイスを含めるかどうかを判断する検索条件。

戻り値

Type[]

現在の Type によって実装または継承されたインターフェイスのフィルター処理されたリストを表している Type オブジェクトの配列。または、フィルターに一致するインターフェイスが現在の Type によって実装または継承されていない場合は、空の配列。

実装

例外

filternullです。

静的初期化子が呼び出され、例外をスローします。

次の例では、指定した型によって実装または継承された指定したインターフェイスを検索し、インターフェイス名を表示します。

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

注釈

このメソッドは、派生クラスによってオーバーライドできます。

Module.FilterTypeNameデリゲートの代わりにSystem.Reflection.TypeFilter、 クラスによってSystem.Reflection.Module提供される および Module.FilterTypeNameIgnoreCase デリゲートも使用できます。

このクラスによって実装されるすべてのインターフェイスは、基底クラスまたはこのクラス自体によって宣言されているかどうかに関係なく、検索中に考慮されます。

このメソッドは基底クラス階層を検索し、各クラスが実装する一致する各インターフェイスと、それらの各インターフェイスが実装するすべての一致インターフェイス (つまり、一致するインターフェイスの推移的なクロージャが返されます) を返します。 重複するインターフェイスは返されません。

現在 Type の がジェネリック型またはジェネリック メソッドの定義で型パラメーターを表す場合は、 FindInterfaces 型パラメーターの制約で宣言されているすべてのインターフェイスと、制約で宣言されたインターフェイスを介して継承されたすべてのインターフェイスを検索します。 現在 Type の がジェネリック型の型引数を表す場合は、 FindInterfaces 制約に一致するかどうかに関係なく、型によって実装されたすべてのインターフェイスが検索されます。

注意

FindInterfaces は、ジェネリックでない型でもジェネリック インターフェイスを返すことができます。 たとえば、非ジェネリック型では、 (Visual Basic では )IEnumerable(Of Integer) を実装IEnumerable<int>できます。

適用対象

製品 バージョン
.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

こちらもご覧ください