Поделиться через


Type.GetMember Метод

Определение

Возвращает указанные элементы текущего Type.

Перегрузки

Имя Описание
GetMember(String)

Ищет общедоступных участников с указанным именем.

GetMember(String, BindingFlags)

Выполняет поиск указанных элементов с помощью указанных ограничений привязки.

GetMember(String, MemberTypes, BindingFlags)

Выполняет поиск указанных элементов указанного типа элемента с помощью указанных ограничений привязки.

GetMember(String)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Ищет общедоступных участников с указанным именем.

public:
 cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.MemberInfo[] GetMember(string name);
public System.Reflection.MemberInfo[] GetMember(string name);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetMember : string -> System.Reflection.MemberInfo[]
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 с указанным именем, если он найден; в противном случае — пустой массив.

Реализации

Атрибуты

Исключения

name равно null.

Примеры

В следующем примере отображаются все члены String класса, начинающиеся с буквы C.


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.");
        }
    }
open System
open System.Security
open System.Reflection

type MyMemberSample() =
    member _.GetMemberInfo() =
        let myString = "GetMember_String"

        let myType = myString.GetType()
        // Get the members for myString starting with the letter C.
        let myMembers = myType.GetMember "C*"
        if myMembers.Length > 0 then
            printfn $"\nThe member(s) starting with the letter C for type {myType}:"
            for index = 0 to myMembers.Length - 1 do
                printfn $"Member {index + 1}: {myMembers[index]}"
        else
            printfn "No members match the search criteria."

    member _.GetPublicStaticMemberInfo() =
        let myString = "GetMember_String_BindingFlag"
        let myType = myString.GetType()
        // Get the public static members for the class myString starting with the letter C.
        let myMembers = myType.GetMember("C*", BindingFlags.Public ||| BindingFlags.Static)
        if myMembers.Length > 0 then
            printfn $"\nThe public static member(s) starting with the letter C for type {myType}:"
            for index = 0 to myMembers.Length - 1 do
                printfn $"Member {index + 1}: {myMembers[index]}"
        else
            printfn "No members match the search criteria."

    member _.GetPublicInstanceMethodMemberInfo() =
        let myString = "GetMember_String_MemberType_BindingFlag"
        let myType = myString.GetType()
        // Get the public instance methods for myString starting with the letter C.
        let myMembers = myType.GetMember("C*", MemberTypes.Method, BindingFlags.Public ||| BindingFlags.Instance)
        if myMembers.Length > 0 then
            printfn $"\nThe public instance method(s) starting with the letter C for type {myType}:"
            for index = 0 to myMembers.Length - 1 do
                printfn $"Member {index + 1}: {myMembers[index]}"
        else
            printfn "No members match the search criteria."

let myClass = MyMemberSample()
try
    myClass.GetMemberInfo()
    myClass.GetPublicStaticMemberInfo()
    myClass.GetPublicInstanceMethodMemberInfo()
with
| :? ArgumentNullException as e ->
    printfn "ArgumentNullException occurred."
    printfn $"Source: {e.Source}"
    printfn $"Message: {e.Message}"
| :? NotSupportedException as e ->
    printfn $"NotSupportedException occurred."
    printfn $"Source: {e.Source}"
    printfn $"Message: {e.Message}"
| :? SecurityException as e ->
    printfn "SecurityException occurred."
    printfn $"Source: {e.Source}"
    printfn $"Message: {e.Message}"
| e ->
    printfn "Exception occurred."
    printfn $"Source: {e.Source}"
    printfn $"Message: {e.Message}"

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 Поиск для name чувствителен к регистру. Поиск включает общедоступные статические и общедоступные члены экземпляра.

Члены включают свойства, методы, поля, события и т. д.

В .NET 6 и более ранних версиях GetMember метод не возвращает элементы в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка возврата элементов, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе упорядочения метаданных в сборке.

Эта перегрузка метода не будет находить инициализаторы классов (статический конструктор). Чтобы найти инициализаторы классов, используйте перегрузку, которая принимает BindingFlagsи укажите | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublicв Visual Basic). Вы также можете получить инициализатор класса с помощью TypeInitializer свойства.

В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.

Тип участника Статический Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда скрывается по имени и подписи.
Event Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи.
Вложенный тип Нет Нет
Недвижимость Неприменимо Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.

  3. Пользовательские атрибуты не являются частью общей системы типов.

Если текущий Type представляет созданный универсальный тип, этот метод возвращает MemberInfo параметры типа, замененные соответствующими аргументами типа.

Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск членов ограничения класса или членов Object , если нет ограничения класса.

Замечание

Для универсальных методов не включайте аргументы nameтипа в . Например, код GetMember("MyMethod<int>") C# ищет элемент с текстовым именем "MyMethod<int>", а не для метода с именем MyMethod одного универсального аргумента типа int.

См. также раздел

Применяется к

GetMember(String, BindingFlags)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Выполняет поиск указанных элементов с помощью указанных ограничений привязки.

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public virtual System.Reflection.MemberInfo[] GetMember(string name, System.Reflection.BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public virtual System.Reflection.MemberInfo[] GetMember(string name, System.Reflection.BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember(string name, System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
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 с указанным именем, если он найден; в противном случае — пустой массив.

Реализации

Атрибуты

Исключения

name равно null.

Примеры

В следующем примере отображаются все общедоступные статические члены myString класса, начинающиеся с буквы C.

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.");
    }
}
member _.GetPublicStaticMemberInfo() =
    let myString = "GetMember_String_BindingFlag"
    let myType = myString.GetType()
    // Get the public static members for the class myString starting with the letter C.
    let myMembers = myType.GetMember("C*", BindingFlags.Public ||| BindingFlags.Static)
    if myMembers.Length > 0 then
        printfn $"\nThe public static member(s) starting with the letter C for type {myType}:"
        for index = 0 to myMembers.Length - 1 do
            printfn $"Member {index + 1}: {myMembers[index]}"
    else
        printfn "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

Комментарии

Этот метод можно переопределить производным классом.

Члены включают свойства, методы, поля, события и т. д.

В .NET 6 и более ранних версиях GetMember метод не возвращает элементы в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка возврата элементов, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе упорядочения метаданных в сборке.

BindingFlags Следующие флаги фильтров можно использовать для определения элементов, которые необходимо включить в поиск:

  • Чтобы получить возврат, необходимо указать либо BindingFlags.Instance, либо BindingFlags.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 (OrBindingFlags.StaticBindingFlags.NonPublicв Visual Basic) для .bindingAttr Вы также можете получить инициализатор класса с помощью TypeInitializer свойства.

Если текущий Type представляет созданный универсальный тип, этот метод возвращает MemberInfo параметры типа, замененные соответствующими аргументами типа.

Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск членов ограничения класса или членов Object , если нет ограничения класса.

Замечание

Для универсальных методов не включайте аргументы nameтипа в . Например, код GetMember("MyMethod<int>") C# ищет элемент с текстовым именем "MyMethod<int>", а не для метода с именем MyMethod одного универсального аргумента типа int.

См. также раздел

Применяется к

GetMember(String, MemberTypes, BindingFlags)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Выполняет поиск указанных элементов указанного типа элемента с помощью указанных ограничений привязки.

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::MemberTypes type, System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public virtual System.Reflection.MemberInfo[] GetMember(string name, System.Reflection.MemberTypes type, System.Reflection.BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public virtual System.Reflection.MemberInfo[] GetMember(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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
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[]
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
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[]
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 с указанным именем, если он найден; в противном случае — пустой массив.

Реализации

Атрибуты

Исключения

name равно null.

Производный класс должен предоставлять реализацию.

Примеры

В следующем примере отображаются все методы myString класса, начинающиеся с буквы C.

    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.");
        }
    }
}
member _.GetPublicInstanceMethodMemberInfo() =
    let myString = "GetMember_String_MemberType_BindingFlag"
    let myType = myString.GetType()
    // Get the public instance methods for myString starting with the letter C.
    let myMembers = myType.GetMember("C*", MemberTypes.Method, BindingFlags.Public ||| BindingFlags.Instance)
    if myMembers.Length > 0 then
        printfn $"\nThe public instance method(s) starting with the letter C for type {myType}:"
        for index = 0 to myMembers.Length - 1 do
            printfn $"Member {index + 1}: {myMembers[index]}"
    else
        printfn "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

Комментарии

Члены включают свойства, методы, поля, события и т. д.

В .NET 6 и более ранних версиях GetMember метод не возвращает элементы в определенном порядке, например в алфавитном порядке или порядке объявления. Код не должен зависеть от порядка возврата элементов, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе упорядочения метаданных в сборке.

BindingFlags Следующие флаги фильтров можно использовать для определения элементов, которые необходимо включить в поиск:

  • Чтобы получить возврат, необходимо указать либо BindingFlags.Instance, либо BindingFlags.Static.

  • Укажите BindingFlags.Public , чтобы включить общедоступные члены в поиск.

  • Укажите BindingFlags.NonPublic , чтобы включить не открытые члены (т. е. частные, внутренние и защищенные элементы) в поиск.

  • Укажите BindingFlags.FlattenHierarchy , чтобы включить public и protected статические элементы в иерархию; private статические элементы в унаследованных классах не включаются.

Для изменения работы поиска можно использовать следующие BindingFlags флаги модификатора:

  • BindingFlags.IgnoreCase игнорировать регистр name.

  • BindingFlags.DeclaredOnly поиск только членов, объявленных на Typeнее, а не наследуемые.

См. System.Reflection.BindingFlags для получения дополнительной информации.

Чтобы получить инициализатор класса (статический конструктор) с помощью этой перегрузки метода, необходимо указать "статический конструктор" для , MemberTypes.Constructor для nametypeи BindingFlags.Static | BindingFlags.NonPublic (OrBindingFlags.StaticBindingFlags.NonPublicв Visual Basic) для .bindingAttr Вы также можете получить инициализатор класса с помощью TypeInitializer свойства.

Если текущий Type представляет созданный универсальный тип, этот метод возвращает MemberInfo параметры типа, замененные соответствующими аргументами типа.

Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск членов ограничения класса или членов Object , если нет ограничения класса.

Замечание

Для универсальных методов не включайте аргументы nameтипа в . Например, код GetMember("MyMethod<int>") C# ищет элемент с текстовым именем "MyMethod<int>", а не для метода с именем MyMethod одного универсального аргумента типа int.

См. также раздел

Применяется к