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, представляющий открытые члены с заданным именем, если такие члены есть, и пустой массив, если таких членов нет.
Реализации
Исключения
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 ниже. |
Метод | Нет | Да. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре. |
Вложенный тип | Нет | Нет |
Свойство. | Неприменимо | Правило системы общих типов — это то же наследование, что и методы, реализующие свойство. Отражение рассматривает свойства как скрытые по имени и сигнатуре. См. Примечание 2 ниже. |
При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
Настраиваемые атрибуты не являются частью системы общих типов.
Если текущий объект Type представляет сконструированный универсальный тип, этот метод возвращает объект MemberInfo с параметрами типа, замененными соответствующими аргументами типа.
Если Current Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск членов ограничения класса или членов, Object Если ограничение класса отсутствует.
Примечание
Для универсальных методов не включайте аргументы типа в name
. Например, код C# GetMember("MyMethod<int>")
выполняет поиск элемента с текстовым именем " MyMethod<int>
", а не для метода с именем MyMethod
, имеющим один универсальный аргумент типа int
.
См. также раздел
- MemberInfo
- String
- DefaultBinder
- GetMembers()
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
Применяется к
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, представляющий открытые члены с заданным именем, если такие члены есть, и пустой массив, если таких членов нет.
Реализации
Исключения
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.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
.
См. также раздел
- MemberInfo
- String
- BindingFlags
- DefaultBinder
- GetMembers()
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
Применяется к
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, представляющий открытые члены с заданным именем, если такие члены есть, и пустой массив, если таких членов нет.
Реализации
Исключения
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.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
.
См. также раздел
- MemberInfo
- String
- BindingFlags
- DefaultBinder
- GetMembers()
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)