다음을 통해 공유


Type.FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) 메서드

정의

지정된 멤버 형식의 MemberInfo 개체에 대한 필터링된 배열을 반환합니다.

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ FindMembers(System::Reflection::MemberTypes memberType, System::Reflection::BindingFlags bindingAttr, System::Reflection::MemberFilter ^ filter, System::Object ^ filterCriteria);
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);
abstract member FindMembers : System.Reflection.MemberTypes * System.Reflection.BindingFlags * System.Reflection.MemberFilter * obj -> System.Reflection.MemberInfo[]
override this.FindMembers : System.Reflection.MemberTypes * System.Reflection.BindingFlags * System.Reflection.MemberFilter * obj -> System.Reflection.MemberInfo[]
Public Overridable Function FindMembers (memberType As MemberTypes, bindingAttr As BindingFlags, filter As MemberFilter, filterCriteria As Object) As MemberInfo()

매개 변수

memberType
MemberTypes

검색할 멤버 형식을 나타내는 열거형 값의 비트 조합입니다.

bindingAttr
BindingFlags

검색 방법을 지정하는 열거형 값의 비트 조합입니다.

또는

null을 반환하는 Default입니다.

filter
MemberFilter

비교를 수행하여 현재 검사 중인 멤버가 true와 일치하면 filterCriteria이고, 그렇지 않으면 false인 대리자입니다.

filterCriteria
Object

MemberInfo 개체의 배열에 멤버가 반환되는지를 결정하는 검색 조건입니다.

FieldAttributes, MethodAttributesMethodImplAttributes의 필드는 이 클래스에서 제공하는 FilterAttribute 대리자와 함께 사용할 수 있습니다.

반환

지정된 멤버 형식의 MemberInfo 개체에 대한 필터링된 배열입니다.

또는

현재 Type에 필터 조건과 일치하는 memberType 형식의 멤버가 없으면 빈 배열입니다.

구현

예외

filter이(가) null인 경우

예제

다음 예제에서는 지정된 검색 조건과 일치하는 클래스의 모든 멤버를 찾은 다음 일치하는 멤버를 표시합니다.

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

Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)
*/
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)
*/
open System.Reflection

let delegateToSearchCriteria (objMemberInfo: MemberInfo) (objSearch: obj) =
    // Compare the name of the member function with the filter criteria.
    string objMemberInfo.Name = string objSearch

let objTest = obj ()
let objType = objTest.GetType ()
try
    //Find all static or public methods in the Object class that match the specified name.
    let arrayMemberInfo = 
        objType.FindMembers(MemberTypes.Method, BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.Instance, MemberFilter delegateToSearchCriteria, "ReferenceEquals")

    for info in arrayMemberInfo do
        printfn $"Result of FindMembers -\t{info}\n"
with e ->
    printfn $"Exception : {e}"

(* The example produces the following output:

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

Imports System.Reflection

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

    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
' The example produces the following output:
'
' Result of FindMembers - Boolean ReferenceEquals(System.Object, System.Object)

설명

이 메서드는 파생 클래스로 재정의할 수 있습니다.

멤버에는 속성, 메서드, 필드, 이벤트 등이 포함됩니다.

메서드가 FindMembers 멤버 정보를 성공적으로 검색하려면 인수에 bindingAttr 및 중 BindingFlags.Instance 하나 이상과 및 BindingFlags.StaticBindingFlags.PublicBindingFlags.NonPublic 하나 이상이 포함되어야 합니다.

다음 BindingFlags 필터 플래그를 사용하여 검색에 포함할 멤버를 정의할 수 있습니다.

  • 검색에 instance 멤버를 포함하도록 지정 BindingFlags.Instance 합니다.

  • 검색에 정적 멤버를 포함하도록 지정 BindingFlags.Static 합니다.

  • 검색에 공용 멤버를 포함하도록 지정 BindingFlags.Public 합니다.

  • 비공용 멤버(즉, 프라이빗, 내부 및 보호된 멤버)를 검색에 포함하도록 지정 BindingFlags.NonPublic 합니다.

다음 BindingFlags 한정자 플래그를 사용하여 검색 작동 방식을 변경할 수 있습니다.

  • BindingFlags.DeclaredOnly 에 선언된 Type멤버만 검색하려면 이고, 단순히 상속된 멤버는 검색하지 않습니다.

자세한 내용은 System.Reflection.BindingFlags를 참조하세요.

이 메서드를 사용하여 클래스 이니셜라이저(정적 생성자)를 얻으려면 (BindingFlags.NonPublicBindingFlags.StaticOrVisual Basic의 경우)을 지정 BindingFlags.Static | BindingFlags.NonPublic 해야 합니다. 속성을 사용하여 클래스 이니셜라이저를 TypeInitializer 가져올 수도 있습니다.

현재 Type 가 제네릭 형식 또는 제네릭 메서드의 형식 매개 변수를 나타내는 경우 클래스 FindMembers 제약 조건 및 형식 매개 변수의 인터페이스 제약 조건으로 선언된 멤버를 처리합니다.

인수는 filter 형식 MemberFilter의 사용자 지정 대리자이거나 다음 미리 정의된 대리자 중 하나일 수 있습니다.

적용 대상

추가 정보