Type.FindMembers 方法

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

**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public Overridable Function FindMembers ( _
    memberType As MemberTypes, _
    bindingAttr As BindingFlags, _
    filter As MemberFilter, _
    filterCriteria As Object _
) As MemberInfo()
用法
Dim instance As Type
Dim memberType As MemberTypes
Dim bindingAttr As BindingFlags
Dim filter As MemberFilter
Dim filterCriteria As Object
Dim returnValue As MemberInfo()

returnValue = instance.FindMembers(memberType, bindingAttr, filter, filterCriteria)
public virtual MemberInfo[] FindMembers (
    MemberTypes memberType,
    BindingFlags bindingAttr,
    MemberFilter filter,
    Object filterCriteria
)
public:
virtual array<MemberInfo^>^ FindMembers (
    MemberTypes memberType, 
    BindingFlags bindingAttr, 
    MemberFilter^ filter, 
    Object^ filterCriteria
)
public MemberInfo[] FindMembers (
    MemberTypes memberType, 
    BindingFlags bindingAttr, 
    MemberFilter filter, 
    Object filterCriteria
)
public function FindMembers (
    memberType : MemberTypes, 
    bindingAttr : BindingFlags, 
    filter : MemberFilter, 
    filterCriteria : Object
) : MemberInfo[]

参数

  • memberType
    指示要搜索的成员类型的 MemberTypes 对象。
  • bindingAttr
    一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。

    - 或 -

    零,以返回 空引用(在 Visual Basic 中为 Nothing)。

  • filter
    执行比较的委托,如果当前被检查的成员匹配 filterCriteria,则返回 true;否则返回 false。可以使用该类提供的 FilterAttributeFilterNameFilterNameIgnoreCase 委托。第一个委托使用 FieldAttributesMethodAttributesMethodImplAttributes 的字段作为搜索判据,另两个委托使用 String 对象作为搜索判据。
  • filterCriteria
    确定成员是否在 MemberInfo 对象数组中返回的搜索判据。

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

返回值

指定成员类型的 MemberInfo 对象的筛选数组。 - 或 - 如果当前 Type 没有匹配筛选判据的 memberType 类型成员,则为 MemberInfo 类型的空数组。

异常

异常类型 条件

ArgumentNullException

filter 为 空引用(在 Visual Basic 中为 Nothing)。

备注

此方法可由派生类重写。

成员包括属性、方法、字段、事件等。如果请求的类型是非公共类型,并且调用方不具有 ReflectionPermission 来反射当前程序集之外的非公共对象,则此方法返回 空引用(在 Visual Basic 中为 Nothing)。

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

  • Instance,表示将实例成员包含在搜索中。

  • Static,表示将静态成员包含在搜索中。

  • Public,表示将公共成员包含在搜索中。

  • NonPublic,表示将非公共成员(即私有成员和受保护的成员)包含在搜索中。

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

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

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

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

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

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

示例

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

Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

Class MyFindMembersClass

    Public Shared Sub Main()
        Dim objTest As New Object()
        Dim objType As Type = objTest.GetType()
        Dim arrayMemberInfo() As MemberInfo
        Try
            'Find all static or public methods in the Object 
            'class that match the specified name.
            arrayMemberInfo = objType.FindMembers(MemberTypes.Method, _
                              BindingFlags.Public Or BindingFlags.Static _
                              Or BindingFlags.Instance, _
                              New MemberFilter(AddressOf DelegateToSearchCriteria), _
                              "ReferenceEquals")

            Dim index As Integer
            For index = 0 To arrayMemberInfo.Length - 1
                Console.WriteLine("Result of FindMembers -" + ControlChars.Tab + _
                               arrayMemberInfo(index).ToString() + ControlChars.Cr)
            Next index
        Catch e As Exception
            Console.WriteLine("Exception : " + e.ToString())
        End Try
    End Sub 'Main

    Public Shared Function DelegateToSearchCriteria _
                            (ByVal objMemberInfo As MemberInfo, _
                             ByVal objSearch As Object) As Boolean
        ' Compare the name of the member function with the filter criteria.
        If objMemberInfo.Name.ToString() = objSearch.ToString() Then
            Return True
        Else
            Return False
        End If
    End Function 'DelegateToSearchCriteria 
End Class 'MyFindMembersClass
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;
    }
}
using namespace System;
using namespace System::Reflection;
ref class MyFindMembersClass
{
public:
   static void Test()
   {
      Object^ objTest = gcnew Object;
      Type^ objType = objTest->GetType();
      array<MemberInfo^>^arrayMemberInfo;
      try
      {
         
         //Find all static or public methods in the Object class that match the specified name.
         arrayMemberInfo = objType->FindMembers( MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::Instance), gcnew MemberFilter( DelegateToSearchCriteria ), "ReferenceEquals" );
         for ( int index = 0; index < arrayMemberInfo->Length; index++ )
            Console::WriteLine( "Result of FindMembers -\t {0}", String::Concat( arrayMemberInfo[ index ], "\n" ) );
      }
      catch ( Exception^ e ) 
      {
         Console::WriteLine( "Exception : {0}", e );
      }

   }

   static bool DelegateToSearchCriteria( MemberInfo^ objMemberInfo, Object^ objSearch )
   {
      
      // Compare the name of the member function with the filter criteria.
      if ( objMemberInfo->Name->Equals( objSearch->ToString() ) )
            return true;
      else
            return false;
   }

};

int main()
{
   MyFindMembersClass::Test();
}
import System.*;
import System.Reflection.*;

class MyFindMembersClass
{
    public static void main(String[] args)
    {
        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.get_Item(index).ToString() + "\n");
            }
        }
        catch (System.Exception e) {
            Console.WriteLine("Exception : " + e.ToString());
        }
    } //main

    public static boolean DelegateToSearchCriteria(MemberInfo objMemberInfo,
        Object objSearch)
    {
        // Compare the name of the member function with the filter criteria.
        if (objMemberInfo.get_Name().ToString().Equals(objSearch.ToString())) {
            return true;
        }
        else {
            return false;
        }
    } //DelegateToSearchCriteria
} //MyFindMembersClass

.NET Framework 安全性

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

Type 类
Type 成员
System 命名空间
MemberInfo
BindingFlags
DefaultBinder
ReflectionPermission
GetMember
GetMembers
GetDefaultMembers