System.Type.FindInterfaces 方法

方法描述

返回表示接口(由当前 Type 所实现或继承)的筛选列表的 Type 对象数组。

语法定义(C# System.Type.FindInterfaces 方法 的用法)

public virtual Type[] FindInterfaces(
	TypeFilter filter,
	Object filterCriteria
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
filter System-Reflection-TypeFilter 对照filterCriteria.比较接口的委托。
filterCriteria System-Object 确定接口是否应包括在返回数组中的搜索判据。
返回值 System.Type[] 一个表示当前 Type 实现或继承的接口的筛选列表的 Type 对象数组,或者类型 Type 的空数组(如果当前 Type 没有实现或继承匹配筛选器的接口)。

提示和注释

此方法可由派生类重写。

System.Reflection.Module 类提供的 Module.FilterTypeName 和 Module.FilterTypeNameIgnoreCase 委托也可能被使用,以替代 System.Reflection.TypeFilter 委托。

无论是由基类声明还是由该类自己声明,该类实现的所有接口在搜索期间都会被考虑。

此方法搜索基类层次结构,返回每个类所实现的每个匹配接口,以及那些接口中的每一个所实现的所有匹配接口(即返回匹配接口的可传递结束)。 不返回重复的接口。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则 FindInterfaces 搜索类型参数的约束中声明的所有接口,以及通过约束中声明的接口继承的所有接口。 如果当前 Type 表示泛型类型的类型实参,则 FindInterfaces 搜索该类型实现的所有接口,而不管它们是否匹配那些约束。

注意

即使在非泛型类型上,FindInterfaces 也可能会返回泛型接口。 例如,某个非泛型类型可能实现了 IEnumerable(在 Visual Basic 中为 IEnumerable(Of Integer))。

System.Type.FindInterfaces 方法例子

下面的示例查找由指定的类型实现或继承的指定接口,然后显示这些接口名称。

using System;
using System.Xml;
using System.Reflection;

public class MyFindInterfacesSample 
{
    public static void Main()
    {
        try
        {
            XmlDocument myXMLDoc = new XmlDocument();
            myXMLDoc.LoadXml("" +
                "Pride And Prejudice" + "");
            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;
    }
}

异常

异常 异常描述
ArgumentNullException filter 为 null。
TargetInvocationException 调用静态初始值设定项并引发异常。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。