Type.FindInterfaces(TypeFilter, Object) 메서드

정의

현재 Type에 의해 구현되거나 상속되는 인터페이스의 필터링된 목록을 나타내는 Type 개체의 배열을 반환합니다.Returns an array of Type objects representing a filtered list of interfaces implemented or inherited by the current 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()

매개 변수

filter
TypeFilter

인터페이스를 filterCriteria에 대해 비교하는 대리자입니다.The delegate that compares the interfaces against filterCriteria.

filterCriteria
Object

반환되는 배열에 인터페이스가 포함되어야 하는지를 결정하는 검색 조건입니다.The search criteria that determines whether an interface should be included in the returned array.

반환

Type[]

현재 Type에 의해 구현되거나 상속된 인터페이스의 필터링된 목록을 나타내는 Type 개체 배열이거나, 필터와 일치하는 인터페이스 중에서 현재 Type에 의해 구현되거나 상속된 인터페이스가 없는 경우에는 빈 배열입니다.An array of Type objects representing a filtered list of the interfaces implemented or inherited by the current Type, or an empty array if no interfaces matching the filter are implemented or inherited by the current Type.

구현

예외

filternull입니다.filter is null.

정적 이니셜라이저가 호출되고 예외를 발생합니다.A static initializer is invoked and throws an exception.

예제

다음 예제에서는 지정된 된 인터페이스 구현 또는 지정된 된 형식에서 상속 및 인터페이스 이름을 표시 한 다음를 찾습니다.The following example finds the specified interface implemented or inherited by the specified type, and then displays the interface names.

#using <system.xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Reflection;
public ref class MyFindInterfacesSample
{
public:
    static bool MyInterfaceFilter(Type^ typeObj, Object^ criteriaObj)
    {
        if(typeObj->ToString()->Equals(criteriaObj->ToString()))
            return true;
        else
            return false;
   }
};

int main()
{
    try
    {
        XmlDocument^ myXMLDoc = gcnew 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 = gcnew TypeFilter( 
            MyFindInterfacesSample::MyInterfaceFilter);
        array<String^>^myInterfaceList = {"System.Collections.IEnumerable",
            "System.Collections.ICollection"};
        for(int index = 0; index < myInterfaceList->Length; index++)
        {
            array<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]);
            }
            else
                Console::WriteLine(
                    "\n{0} does not implement the interface {1}.", 
                    myType, myInterfaceList[index]);

        }
    }
    catch(ArgumentNullException^ e) 
    {
        Console::WriteLine("ArgumentNullException: {0}", e->Message);
    }
    catch(TargetInvocationException^ e) 
    {
        Console::WriteLine("TargetInvocationException: {0}", e->Message);
    }
    catch(Exception^ e) 
    {
        Console::WriteLine("Exception: {0}", e->Message);
    }
}

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

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

설명

이 메서드는 파생된 클래스에서 재정의할 수 있습니다.This method can be overridden by a derived class.

Module.FilterTypeNameModule.FilterTypeNameIgnoreCase 대리자가 제공한 합니다 System.Reflection.Module 클래스도 사용할 수 있습니다, 법률의는 System.Reflection.TypeFilter 위임 합니다.The Module.FilterTypeName and Module.FilterTypeNameIgnoreCase delegates supplied by the System.Reflection.Module class may also be used, in lieu of the System.Reflection.TypeFilter delegate.

이 클래스에서 구현 된 인터페이스의 모든 값은 기본 클래스 또는 자체이 클래스에서 선언 하는지 여부를 검색 하는 동안 간주 됩니다.All of the interfaces implemented by this class are considered during the search, whether declared by a base class or this class itself.

이 메서드 검색 인터페이스가 구현 하는 각 인터페이스의 각 각각 구현 하는 일치 하는 모든와 일치 하는 인터페이스를 반환 합니다. 기본 클래스 계층 (즉, 일치 하는 인터페이스의 전이적 closure이 반환 됨).This method searches the base class hierarchy, returning each of the matching interfaces each class implements as well as all the matching interfaces each of those interfaces implements (that is, the transitive closure of the matching interfaces is returned). 중복 된 인터페이스가 없는 반환 됩니다.No duplicate interfaces are returned.

하는 경우 현재 Type 제네릭 형식 또는 제네릭 메서드 정의의 형식 매개 변수를 나타내는 FindInterfaces 형식 매개 변수에 대 한 제약 조건에 선언 된 모든 인터페이스를 검색 하 고 인터페이스를 통해 상속 된 모든 인터페이스 제약 조건에서 선언 됩니다.If the current Type represents a type parameter in the definition of a generic type or generic method, FindInterfaces searches all the interfaces declared in the constraints on the type parameter, and all interfaces inherited through the interfaces declared in the constraints. 하는 경우 현재 Type 제네릭 형식의 형식 인수를 나타내는 FindInterfaces 제약 조건과 일치 하는지 여부 또는 형식으로 구현 하는 모든 인터페이스를 검색 합니다.If the current Type represents a type argument of a generic type, FindInterfaces searches all the interfaces implemented by the type, whether or not they match constraints.

참고

FindInterfaces 제네릭 되지 않는 형식에도 제네릭 인터페이스를 반환할 수 있습니다.FindInterfaces can return generic interfaces, even on types that are not generic. 예를 들어 제네릭이 아닌 형식을 구현할 수 있습니다 IEnumerable<int> (IEnumerable(Of Integer) Visual basic에서).For example, a nongeneric type might implement IEnumerable<int> (IEnumerable(Of Integer) in Visual Basic).

적용 대상

추가 정보