次の方法で共有


Type.FindMembers メソッド

指定したメンバ型の MemberInfo オブジェクトの配列にフィルタを適用して返します。

Public Overridable Function FindMembers( _
   ByVal memberType As MemberTypes, _   ByVal bindingAttr As BindingFlags, _   ByVal filter As MemberFilter, _   ByVal filterCriteria As Object _) As MemberInfo()
[C#]
public virtual MemberInfo[] FindMembers(MemberTypesmemberType,BindingFlagsbindingAttr,MemberFilterfilter,objectfilterCriteria);
[C++]
public: virtual MemberInfo* FindMembers(MemberTypesmemberType,BindingFlagsbindingAttr,MemberFilter* filter,Object* filterCriteria) [];
[JScript]
public function FindMembers(
   memberType : MemberTypes,bindingAttr : BindingFlags,filter : MemberFilter,filterCriteria : Object) : MemberInfo[];

パラメータ

  • memberType
    検索するメンバの型を示す MemberTypes オブジェクト。

  • bindingAttr
    検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。

    または

    null 参照 (Visual Basic では Nothing) を返す 0。

  • filter
    比較を実行して、現在調べているメンバが filterCriteria に一致する場合は true を返し、それ以外の場合は false を返すデリゲート。このクラスで提供される FilterAttribute デリゲート、 FilterName デリゲート、および FilterNameIgnoreCase デリゲートを使用できます。1 つ目のデリゲートは、検索条件として FieldAttributesMethodAttributesMethodImplAttributes の各フィールドを使用し、他の 2 つのデリゲートは、検索条件として String オブジェクトを使用します。

  • filterCriteria
    MemberInfo オブジェクトの配列でメンバが返されたかどうかを判断する検索条件。

    FieldAttributesMethodAttributesMethodImplAttributes の各フィールドは、このクラスで提供される FilterAttribute デリゲートと組み合わせて使用できます。

戻り値

指定したメンバ型の MemberInfo オブジェクトのフィルタ適用済みの配列。

または

現在の Type に、フィルタ条件に一致する memberType 型のメンバが存在しない場合は、 MemberInfo 型の空の配列。

例外

例外の種類 条件
ArgumentNullException filter が null 参照 (Visual Basic では Nothing) です。

解説

このメソッドは、派生クラスでオーバーライドできます。

メンバには、プロパティ、メソッド、フィールド、イベントなどがあります。要求された型がパブリックではなく、呼び出し元に現在のアセンブリ外の非パブリック オブジェクトをリフレクションするための ReflectionPermission がない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。

次の BindingFlags フィルタ フラグは、検索対象に含めるメンバを定義するために使用できます。

  • 検索対象にインスタンスのメンバを含めるための Instance。
  • 検索対象に静的メンバを含めるための Static
  • 検索対象にパブリック メンバを含めるための Public
  • 検索対象にパブリックではないメンバ (つまり、プライベート メンバやプロテクト メンバ) を含めるための NonPublic

次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。

  • Type で宣言されたメンバだけを検索するための DeclaredOnly 。単に継承されただけのメンバは検索されません。

詳細については、「 System.Reflection.BindingFlags 」を参照してください。

MemberType の有効な値は、 MemberInfo で定義されます。それらのメンバが見つからない場合は、空の配列が返されます。

クラス初期化子は、 GetMemberGetMembersFindMembers 、および GetConstructors を通じて使用できます。

使用例

[Visual Basic, C#, C++] 指定した検索条件に一致するクラスのメンバをすべて検索し、一致したメンバを表示する例を次に示します。

 

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

[C#] 
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;
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;

__gc class MyFindMembersClass {
public:
   static void Test() {
      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,
            static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static| BindingFlags::Instance),
            new MemberFilter(0, DelegateToSearchCriteria),
            S"ReferenceEquals");

         for (int index=0;index < arrayMemberInfo->Length ;index++)
            Console::WriteLine (S"Result of FindMembers -\t {0}",
            String::Concat( arrayMemberInfo[index], S"\n"));
      } catch (Exception* e) {
         Console::WriteLine (S"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();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

Type クラス | Type メンバ | System 名前空間 | MemberInfo | BindingFlags | DefaultBinder | ReflectionPermission | GetMember | GetMembers | GetDefaultMembers