System.Type.FindMembers 方法

方法描述

返回指定成员类型的 MemberInfo 对象的筛选数组。

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

public virtual MemberInfo[] FindMembers(
	MemberTypes memberType,
	BindingFlags bindingAttr,
	MemberFilter filter,
	Object filterCriteria
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
memberType System-Reflection-MemberTypes 指示要搜索的成员类型的对象。
bindingAttr System-Reflection-BindingFlags 一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。- 或 -零,以返回 null。
filter System-Reflection-MemberFilter 执行比较的委托,如果当前被检查的成员匹配 filterCriteria,则返回 true;否则返回 false。可以使用该类提供的 FilterAttribute、FilterName 和 FilterNameIgnoreCase 委托。第一个委托使用 FieldAttributes、MethodAttributes 和 MethodImplAttributes 的字段作为搜索判据,另两个委托使用 String 对象作为搜索判据。
filterCriteria System-Object 确定成员是否在 MemberInfo 对象数组中返回的搜索判据。FieldAttributes 、MethodAttributes 和 MethodImplAttributes 的字段可以和该类提供的 FilterAttribute 委托一起使用。
返回值 System.Reflection.MemberInfo[] 指定成员类型的 MemberInfo 对象的筛选数组。 - 或 - 如果当前 Type 没有匹配筛选判据的 memberType 类型成员,则为 MemberInfo 类型的空数组。

提示和注释

此方法可由派生类重写。

成员包括属性、方法、字段、事件等。

下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员:

为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。

指定 BindingFlags.Instance,以便将实例成员包含在搜索中。

指定 BindingFlags.Static,以便将静态成员包含在搜索中。

指定 BindingFlags.Public 可在搜索中包含公共成员。

指定 BindingFlags.NonPublic 可在搜索中包含非公共成员(即私有成员、内部成员和受保护的成员)。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式:

BindingFlags.DeclaredOnly ,仅搜索 Type 上声明的成员,而不搜索被简单继承的成员。

有关更多信息,请参见 System.Reflection.BindingFlags。

MemberType 的有效值在 MemberInfo 中定义。 如果没有找到这样的成员,则返回空数组。

若要使用此方法获取类初始值设定项 (.cctor),您必须指定 BindingFlags.Static。 | BindingFlags.NonPublic (isual Basic 中的 BindingFlags.StaticOrBindingFlags.NonPublic)。 还可以使用 TypeInitializer 属性获取类初始值设定项。

如果当前 Type 表示泛型类型或泛型方法的类型参数,则 FindMembers 处理由类型参数的类约束和接口约束声明的任何成员。

System.Type.FindMembers 方法例子

下面的示例在类中查找与指定搜索条件相匹配的所有成员,然后显示匹配的成员。

using System;
using System.Reflection;

class MyFindMembersClass
{
    public static void Main()
    {
        Object objTest = new Object();
        Type objType = objTest.GetType ();
        MemberInfo[] arrayMemberInfo;
        try
        {
            //Find all static or public methods in the Object class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method,
                BindingFlags.Public | BindingFlags.Static| BindingFlags.Instance,
                new MemberFilter(DelegateToSearchCriteria),
                "ReferenceEquals");

            for(int index=0;index < arrayMemberInfo.Length ;index++)
                Console.WriteLine ("Result of FindMembers -\t"+ arrayMemberInfo[index].ToString() +"\n");                 
        }
        catch (Exception e)
        {
            Console.WriteLine ("Exception : " + e.ToString() );            
        }           
    }
    public static bool DelegateToSearchCriteria(MemberInfo objMemberInfo, Object objSearch)
    {
        // Compare the name of the member function with the filter criteria.
        if(objMemberInfo.Name.ToString() == objSearch.ToString())
            return true;
        else 
            return false;
    }
}

异常

异常 异常描述
ArgumentNullException filter 为 null。

命名空间

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 系统要求。