Прочитать на английском

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


Type.GetMember Метод

Определение

Возвращает указанные члены текущего объекта Type.

Перегрузки

GetMember(String)

Выполняет поиск открытого члена с заданным именем.

GetMember(String, BindingFlags)

Выполняет поиск указанных членов, используя заданные ограничения привязки.

GetMember(String, MemberTypes, BindingFlags)

Ищет указанные члены заданного типа, используя установленные ограничения привязки.

GetMember(String)

Выполняет поиск открытого члена с заданным именем.

public System.Reflection.MemberInfo[] GetMember (string name);

Параметры

name
String

Строка, содержащая имя искомых открытых членов.

Возвращаемое значение

MemberInfo[]

Массив объектов 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.");
        }
    }

Комментарии

nameПри поиске учитывается регистр. Поиск включает открытые статические и открытые члены экземпляра.

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

GetMemberМетод не возвращает элементы в определенном порядке, например алфавит или порядок объявления. Код не должен зависеть от порядка, в котором возвращаются элементы, так как этот порядок меняется.

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

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

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

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

  3. Настраиваемые атрибуты не являются частью системы общих типов.

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

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

Примечание

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

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

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

GetMember(String, BindingFlags)

Выполняет поиск указанных членов, используя заданные ограничения привязки.

public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.BindingFlags bindingAttr);

Параметры

name
String

Строка, содержащая имя для поиска элементов.

bindingAttr
BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.

-или- Default для возврата пустого массива.

Возвращаемое значение

MemberInfo[]

Массив объектов 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.");
    }
}

Комментарии

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

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

GetMemberМетод не возвращает элементы в определенном порядке, например алфавит или порядок объявления. Код не должен зависеть от порядка, в котором возвращаются элементы, так как этот порядок меняется.

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 ( BindingFlags.Static Or BindingFlags.NonPublic в Visual Basic) для bindingAttr . Можно также получить инициализатор класса с помощью TypeInitializer Свойства.

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

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

Примечание

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

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

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

GetMember(String, MemberTypes, BindingFlags)

Ищет указанные члены заданного типа, используя установленные ограничения привязки.

public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.MemberTypes type, System.Reflection.BindingFlags bindingAttr);

Параметры

name
String

Строка, содержащая имя для поиска элементов.

type
MemberTypes

Значение, которое нужно найти.

bindingAttr
BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.

-или- Default для возврата пустого массива.

Возвращаемое значение

MemberInfo[]

Массив объектов 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.");
        }
    }
}

Комментарии

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

GetMemberМетод не возвращает элементы в определенном порядке, например алфавит или порядок объявления. Код не должен зависеть от порядка, в котором возвращаются элементы, так как этот порядок меняется.

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 MemberTypes.Constructor для type и BindingFlags.Static | BindingFlags.NonPublic ( BindingFlags.Static Or BindingFlags.NonPublic в Visual Basic) для bindingAttr . Можно также получить инициализатор класса с помощью TypeInitializer Свойства.

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

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

Примечание

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

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

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