Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) 方法

定义

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

public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter? filter, object? filterCriteria);
public virtual System.Reflection.MemberInfo[] FindMembers(System.Reflection.MemberTypes memberType, System.Reflection.BindingFlags bindingAttr, System.Reflection.MemberFilter filter, object filterCriteria);

参数

memberType
MemberTypes

枚举值的按位组合,它指示要搜索的成员的类型。

bindingAttr
BindingFlags

枚举值的按位组合,这些值指定如何进行搜索。

若为 Default,则返回 null

filter
MemberFilter

执行比较的委托,如果当前被检查的成员匹配 true,则返回 filterCriteria;否则返回 false

filterCriteria
Object

确定成员是否在 MemberInfo 对象数组中返回的搜索判据。

FieldAttributesMethodAttributesMethodImplAttributes 的字段可以和该类提供的 FilterAttribute 委托一起使用。

返回

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

如果当前 Type 没有与筛选条件相匹配的 memberType 类型的成员,则为空数组。

实现

例外

filter 上声明的默认值为 null

示例

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

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;
    }
}
/* The example produces the following output:

Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)
*/

注解

派生类可以重写此方法。

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

FindMembers若要使 方法成功检索成员信息,bindingAttr参数必须至少包含 和 BindingFlags.StaticBindingFlags.Instance一个 ,以及 至少一个 BindingFlags.NonPublicBindingFlags.Public

以下 BindingFlags 筛选器标志可用于定义要在搜索中包括的成员:

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

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

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

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

以下 BindingFlags 修饰符标志可用于更改搜索的工作方式:

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

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

若要使用此方法获取类初始值设定项 (静态构造函数) ,必须在 Visual Basic) BindingFlags.StaticOrBindingFlags.NonPublic 中指定BindingFlags.Static | BindingFlags.NonPublic (。 还可以使用 TypeInitializer 属性获取类初始值设定项。

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

参数 filter 可以是 类型的 MemberFilter自定义委托,也可以是以下预定义委托之一:

适用于

产品 版本
.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

另请参阅