Type.FindInterfaces(TypeFilter, Object) 메서드

정의

현재 Type에 의해 구현되거나 상속되는 인터페이스의 필터링된 목록을 나타내는 Type 개체의 배열을 반환합니다.

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

매개 변수

filter
TypeFilter

인터페이스를 filterCriteria에 대해 비교하는 대리자입니다.

filterCriteria
Object

반환되는 배열에 인터페이스가 포함되어야 하는지를 결정하는 검색 조건입니다.

반환

Type[]

현재 Type에 의해 구현되거나 상속된 인터페이스의 필터링된 목록을 나타내는 Type 개체 배열이거나, 필터와 일치하는 인터페이스 중에서 현재 Type에 의해 구현되거나 상속된 인터페이스가 없는 경우에는 빈 배열입니다.

구현

예외

filter이(가) null인 경우

정적 이니셜라이저가 호출되고 예외를 발생합니다.

예제

다음 예제에서는 지정된 형식에 의해 구현되거나 상속된 지정된 인터페이스를 찾은 다음 인터페이스 이름을 표시합니다.

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.ModuleModule.FilterTypeNameIgnoreCase 대리자도 대리자 대신 System.Reflection.TypeFilter 사용할 수 있습니다.

이 클래스에서 구현된 모든 인터페이스는 기본 클래스 또는 이 클래스 자체에 의해 선언되었는지 여부에 관계없이 검색 중에 고려됩니다.

이 메서드는 기본 클래스 계층 구조를 검색하여 각 클래스가 구현하는 각 일치하는 인터페이스와 각 인터페이스가 구현하는 모든 일치 인터페이스(즉, 일치하는 인터페이스의 전이적 폐쇄가 반환됨)를 반환합니다. 중복 인터페이스가 반환되지 않습니다.

현재 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
.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

추가 정보