Type.GetMember 方法

定义

获取当前 Type 的指定成员。

重载

GetMember(String)

搜索具有指定名称的公共成员。

GetMember(String, BindingFlags)

使用指定绑定约束搜索指定成员。

GetMember(String, MemberTypes, BindingFlags)

使用指定绑定约束搜索指定成员类型的指定成员。

GetMember(String)

搜索具有指定名称的公共成员。

public:
 cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public System.Reflection.MemberInfo[] GetMember (string name);
member this.GetMember : string -> System.Reflection.MemberInfo[]
abstract member GetMember : string -> System.Reflection.MemberInfo[]
override this.GetMember : string -> System.Reflection.MemberInfo[]
Public Function GetMember (name As String) As MemberInfo()

参数

name
String

包含要获取的公共成员名称的字符串。

返回

MemberInfo[]

一个表示具有指定名称的公共成员的 MemberInfo 对象数组(如果找到的话);否则为空数组。

实现

例外

name 上声明的默认值为 null

示例

下面的示例显示 String 以字母 C 开头的类的所有成员。

using namespace System;
using namespace System::Security;
using namespace System::Reflection;

// forward declarations:
void GetMemberInfo();
void GetPublicStaticMemberInfo();
void GetPublicInstanceMethodMemberInfo();
int main()
{
   try
   {
      GetMemberInfo();
      GetPublicStaticMemberInfo();
      GetPublicInstanceMethodMemberInfo();
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "ArgumentNullException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( NotSupportedException^ e ) 
   {
      Console::WriteLine( "NotSupportedException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "SecurityException occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception occurred." );
      Console::WriteLine( "Source: {0}", e->Source );
      Console::WriteLine( "Message: {0}", e->Message );
   }

}

void GetMemberInfo()
{
   String^ myString = "GetMember_String";
   Type^ myType = myString->GetType();
   
   // Get the members for myString starting with the letter C.
   array<MemberInfo^>^myMembers = myType->GetMember( "C*" );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe member(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}

using System;
using System.Security;
using System.Reflection;

public class MyMemberSample
{
    public static void Main()
    {
        MyMemberSample myClass = new MyMemberSample();
        try
        {
            myClass.GetMemberInfo();
            myClass.GetPublicStaticMemberInfo();	
            myClass.GetPublicInstanceMethodMemberInfo();	
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(NotSupportedException e)
        {
            Console.WriteLine("NotSupportedException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception occurred.");
            Console.WriteLine("Source: " + e.Source);
            Console.WriteLine("Message: " + e.Message);
        }
    }

    public void GetMemberInfo()
    {
        String myString = "GetMember_String";

        Type myType = myString.GetType();
        // Get the members for myString starting with the letter C.
        MemberInfo[] myMembers = myType.GetMember("C*");
        if(myMembers.Length > 0)
        {
            Console.WriteLine("\nThe member(s) starting with the letter C for type {0}:", myType);
            for(int index=0; index < myMembers.Length; index++)
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
        }
        else
        {
            Console.WriteLine("No members match the search criteria.");
        }
    }

Imports System.Security
Imports System.Reflection

Public Class MyMemberSample

    Public Shared Sub Main()
        Dim [myClass] As New MyMemberSample()
        Try
            [myClass].GetMemberInfo()
            [myClass].GetPublicStaticMemberInfo()
            [myClass].GetPublicInstanceMethodMemberInfo()
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As NotSupportedException
            Console.WriteLine("NotSupportedException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As SecurityException
            Console.WriteLine("SecurityException occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        Catch e As Exception
            Console.WriteLine("Exception occurred.")
            Console.WriteLine(("Source: " + e.Source))
            Console.WriteLine(("Message: " + e.Message))
        End Try
    End Sub


    Public Sub GetMemberInfo()
        Dim myString As [String] = "GetMember_String"
        Dim myType As Type = myString.GetType()
        ' Get the members for myString starting with the letter C.
        Dim myMembers As MemberInfo() = myType.GetMember("C*")
        If myMembers.Length > 0 Then
            Console.WriteLine(ControlChars.Cr + "The member(s) starting with the letter C for type {0}:", myType)
            Dim index As Integer
            For index = 0 To myMembers.Length - 1
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
            Next index
        Else
            Console.WriteLine("No members match the search criteria.")
        End If
    End Sub

注解

的搜索 name 区分大小写。 搜索包括公共静态和公共实例成员。

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

GetMember方法不按特定顺序(如字母顺序或声明顺序)返回成员。 你的代码不能依赖于成员的返回顺序,因为该顺序会有所不同。

此方法重载将找不到) (静态构造函数的类初始值设定项。 若要查找类初始值设定项,请使用采用的重载 BindingFlags ,并指定 BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) 中 | (。 还可以使用属性获取类初始值设定项 TypeInitializer

下表显示了 Get 在类型上反射时方法返回的基类成员。

成员类型 静态 非静态
构造函数
字段 可以。 字段始终按名称和签名隐藏。
事件 不适用 通用类型系统规则是指继承与实现属性的方法相同。 反射将属性视为隐藏的名称和签名。 请参阅下面的注释2。
方法 可以。 虚拟和非虚拟) (方法可以是按名称隐藏或按名称和签名隐藏。
嵌套类型
properties 不适用 通用类型系统规则是指继承与实现属性的方法相同。 反射将属性视为隐藏的名称和签名。 请参阅下面的注释2。
  1. 按名称和签名隐藏将考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、个 sentinel 和非托管调用约定。 这是二进制比较。

  2. 对于反射,属性和事件是按名称和签名隐藏的。 如果在基类中同时具有 get 访问器和 set 访问器的属性,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且你将无法访问基类的资源库。

  3. 自定义属性不属于通用类型系统。

如果当前 Type 表示构造泛型类型,则此方法将返回, MemberInfo 并将类型参数替换为相应的类型参数。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则此方法会搜索类约束的成员,或者如果没有类约束,则搜索的成员 Object

备注

对于泛型方法,请不要在中包括类型参数 name 。 例如,c # 代码将 GetMember("MyMethod<int>") 搜索文本名称为 "" 的成员 MyMethod<int> ,而不是使用一个类型为的 MyMethod 泛型参数的名为的方法 int

另请参阅

适用于

GetMember(String, BindingFlags)

使用指定绑定约束搜索指定成员。

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public Overridable Function GetMember (name As String, bindingAttr As BindingFlags) As MemberInfo()

参数

name
String

包含要获取的成员的名称的字符串。

bindingAttr
BindingFlags

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

  • 或 - 若为 Default,则返回空数组。

返回

MemberInfo[]

一个表示具有指定名称的公共成员的 MemberInfo 对象数组(如果找到的话);否则为空数组。

实现

例外

name 上声明的默认值为 null

示例

下面的示例显示 myString 以字母 C 开头的类的所有公共静态成员。

void GetPublicStaticMemberInfo()
{
   String^ myString = "GetMember_String_BindingFlag";
   Type^ myType = myString->GetType();
   
   // Get the public static members for the class myString starting with the letter C
   array<MemberInfo^>^myMembers = myType->GetMember( "C*", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static) );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe public static member(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}
public void GetPublicStaticMemberInfo()
{
    String myString = "GetMember_String_BindingFlag";
    Type myType = myString.GetType();
    // Get the public static members for the class myString starting with the letter C.
    MemberInfo[] myMembers = myType.GetMember("C*",
        BindingFlags.Public |BindingFlags.Static);
    if(myMembers.Length > 0)
    {
        Console.WriteLine("\nThe public static member(s) starting with the letter C for type {0}:", myType);
        for(int index=0; index < myMembers.Length; index++)
            Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
    }
    else
    {
        Console.WriteLine("No members match the search criteria.");
    }
}
Public Sub GetPublicStaticMemberInfo()
    Dim myString As [String] = "GetMember_String_BindingFlag"

    Dim myType As Type = myString.GetType()
    ' Get the public static members for the class myString starting with the letter C.
    Dim myMembers As MemberInfo() = myType.GetMember("C*", BindingFlags.Public Or BindingFlags.Static)

    If myMembers.Length > 0 Then
        Console.WriteLine(ControlChars.Cr + "The public static member(s) starting with the letter C for type {0}:", myType)
        Dim index As Integer
        For index = 0 To myMembers.Length - 1
            Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
        Next index
    Else
        Console.WriteLine("No members match the search criteria.")
    End If
End Sub

注解

此方法可由派生类重写。

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

GetMember方法不按特定顺序(如字母顺序或声明顺序)返回成员。 你的代码不能依赖于成员的返回顺序,因为该顺序会有所不同。

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

  • 必须指定 BindingFlags.InstanceBindingFlags.Static 才能获取返回。

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

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

  • 指定在 BindingFlags.FlattenHierarchy public protected 层次结构中包含和静态成员; private 不包括继承类中的静态成员。

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

  • BindingFlags.IgnoreCase 如果忽略,则为 name

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

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

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

如果当前 Type 表示构造泛型类型,则此方法将返回, MemberInfo 并将类型参数替换为相应的类型参数。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则此方法会搜索类约束的成员,或者如果没有类约束,则搜索的成员 Object

备注

对于泛型方法,请不要在中包括类型参数 name 。 例如,c # 代码将 GetMember("MyMethod<int>") 搜索文本名称为 "" 的成员 MyMethod<int> ,而不是使用一个类型为的 MyMethod 泛型参数的名为的方法 int

另请参阅

适用于

GetMember(String, MemberTypes, BindingFlags)

使用指定绑定约束搜索指定成员类型的指定成员。

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::MemberTypes type, System::Reflection::BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.MemberTypes type, System.Reflection.BindingFlags bindingAttr);
abstract member GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public Overridable Function GetMember (name As String, type As MemberTypes, bindingAttr As BindingFlags) As MemberInfo()

参数

name
String

包含要获取的成员的名称的字符串。

type
MemberTypes

要搜索的值。

bindingAttr
BindingFlags

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

  • 或 - 若为 Default,则返回空数组。

返回

MemberInfo[]

一个表示具有指定名称的公共成员的 MemberInfo 对象数组(如果找到的话);否则为空数组。

实现

例外

name 上声明的默认值为 null

派生类必须提供一个实现。

示例

下面的示例显示 myString 以字母 C 开头的类的所有方法。

void GetPublicInstanceMethodMemberInfo()
{
   String^ myString = "GetMember_String_MemberType_BindingFlag";
   Type^ myType = myString->GetType();
   
   // Get the public instance methods for myString starting with the letter C.
   array<MemberInfo^>^myMembers = myType->GetMember( "C*", MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
   if ( myMembers->Length > 0 )
   {
      Console::WriteLine( "\nThe public instance method(s) starting with the letter C for type {0}:", myType );
      for ( int index = 0; index < myMembers->Length; index++ )
         Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
   }
   else
      Console::WriteLine( "No members match the search criteria." );
}
    public void GetPublicInstanceMethodMemberInfo()
    {
        String myString = "GetMember_String_MemberType_BindingFlag";
        Type myType = myString.GetType();
        // Get the public instance methods for myString starting with the letter C.
        MemberInfo[] myMembers = myType.GetMember("C*", MemberTypes.Method,
            BindingFlags.Public | BindingFlags.Instance);
        if(myMembers.Length > 0)
        {
            Console.WriteLine("\nThe public instance method(s) starting with the letter C for type {0}:", myType);
            for(int index=0; index < myMembers.Length; index++)
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
        }
        else
        {
            Console.WriteLine("No members match the search criteria.");
        }
    }
}
    Public Sub GetPublicInstanceMethodMemberInfo()
        Dim myString As [String] = "GetMember_String_MemberType_BindingFlag"

        Dim myType As Type = myString.GetType()
        ' Get the public instance methods for myString starting with the letter C.
        Dim myMembers As MemberInfo() = myType.GetMember("C*", MemberTypes.Method, BindingFlags.Public Or BindingFlags.Instance)
        If myMembers.Length > 0 Then
            Console.WriteLine(ControlChars.Cr + "The public instance method(s) starting with the letter C for type {0}:", myType)
            Dim index As Integer
            For index = 0 To myMembers.Length - 1
                Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
            Next index
        Else
            Console.WriteLine("No members match the search criteria.")
        End If
    End Sub
End Class

注解

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

GetMember方法不按特定顺序(如字母顺序或声明顺序)返回成员。 你的代码不能依赖于成员的返回顺序,因为该顺序会有所不同。

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

  • 必须指定 BindingFlags.InstanceBindingFlags.Static 才能获取返回。

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

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

  • 指定在 BindingFlags.FlattenHierarchy public protected 层次结构中包含和静态成员; private 不包括继承类中的静态成员。

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

  • BindingFlags.IgnoreCase 如果忽略,则为 name

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

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

若要使用此方法重载获取类初始值设定项 (静态构造函数) ,必须为指定了 "静态构造函数"; name MemberTypes.Constructor 对于 |,则必须为 type BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or BindingFlags.NonPublic Visual Basic) 中的 (指定 bindingAttr 。 还可以使用属性获取类初始值设定项 TypeInitializer

如果当前 Type 表示构造泛型类型,则此方法将返回, MemberInfo 并将类型参数替换为相应的类型参数。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则此方法会搜索类约束的成员,或者如果没有类约束,则搜索的成员 Object

备注

对于泛型方法,请不要在中包括类型参数 name 。 例如,c # 代码将 GetMember("MyMethod<int>") 搜索文本名称为 "" 的成员 MyMethod<int> ,而不是使用一个类型为的 MyMethod 泛型参数的名为的方法 int

另请参阅

适用于