Type.GetField Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает указанное поле текущего объекта Type.
Перегрузки
GetField(String) |
Выполняет поиск открытого поля с заданным именем. |
GetField(String, BindingFlags) |
Выполняет поиск указанного поля, используя заданные ограничения привязки. |
GetField(String)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Выполняет поиск открытого поля с заданным именем.
public:
System::Reflection::FieldInfo ^ GetField(System::String ^ name);
public:
virtual System::Reflection::FieldInfo ^ GetField(System::String ^ name);
public System.Reflection.FieldInfo? GetField (string name);
public System.Reflection.FieldInfo GetField (string name);
member this.GetField : string -> System.Reflection.FieldInfo
abstract member GetField : string -> System.Reflection.FieldInfo
override this.GetField : string -> System.Reflection.FieldInfo
Public Function GetField (name As String) As FieldInfo
Параметры
- name
- String
Строка, содержащая имя искомого поля данных.
Возвращаемое значение
Объект, представляющий открытое поле с указанным именем, если такое свойство есть, или null
, если такого свойства нет.
Реализации
Исключения
name
имеет значение null
.
Этот объект Type является TypeBuilder, метод CreateType() которого еще не был вызван.
Примеры
В следующем примере возвращается Type
объект для указанного класса, получается FieldInfo объект для поля и отображается значение поля.
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyFieldClassA
{
public:
String^ field;
MyFieldClassA()
{
field = "A Field";
}
property String^ Field
{
String^ get()
{
return field;
}
void set( String^ value )
{
if ( field != value )
{
field = value;
}
}
}
};
public ref class MyFieldClassB
{
public:
String^ field;
MyFieldClassB()
{
field = "B Field";
}
property String^ Field
{
String^ get()
{
return field;
}
void set( String^ value )
{
if ( field != value )
{
field = value;
}
}
}
};
int main()
{
try
{
MyFieldClassB^ myFieldObjectB = gcnew MyFieldClassB;
MyFieldClassA^ myFieldObjectA = gcnew MyFieldClassA;
Type^ myTypeA = Type::GetType( "MyFieldClassA" );
FieldInfo^ myFieldInfo = myTypeA->GetField( "field" );
Type^ myTypeB = Type::GetType( "MyFieldClassB" );
FieldInfo^ myFieldInfo1 = myTypeB->GetField( "field", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
Console::WriteLine( "The value of the field is : {0} ", myFieldInfo->GetValue( myFieldObjectA ) );
Console::WriteLine( "The value of the field is : {0} ", myFieldInfo1->GetValue( myFieldObjectB ) );
}
catch ( SecurityException^ e )
{
Console::WriteLine( "Exception Raised!" );
Console::WriteLine( "Message : {0}", e->Message );
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "Exception Raised!" );
Console::WriteLine( "Message : {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception Raised!" );
Console::WriteLine( "Message : {0}", e->Message );
}
}
using System;
using System.Reflection;
public class MyFieldClassA
{
public string Field = "A Field";
}
public class MyFieldClassB
{
private string field = "B Field";
public string Field
{
get
{
return field;
}
set
{
if (field!=value)
{
field=value;
}
}
}
}
public class MyFieldInfoClass
{
public static void Main()
{
MyFieldClassB myFieldObjectB = new MyFieldClassB();
MyFieldClassA myFieldObjectA = new MyFieldClassA();
Type myTypeA = typeof(MyFieldClassA);
FieldInfo myFieldInfo = myTypeA.GetField("Field");
Type myTypeB = typeof(MyFieldClassB);
FieldInfo myFieldInfo1 = myTypeB.GetField("field",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine("The value of the public field is: '{0}'",
myFieldInfo.GetValue(myFieldObjectA));
Console.WriteLine("The value of the private field is: '{0}'",
myFieldInfo1.GetValue(myFieldObjectB));
}
}
open System.Reflection
type MyFieldClassA =
val public Field: string
new () = { Field = "A Field"}
type MyFieldClassB() =
let field = "B Field"
member _.Field
with get () = field
let myFieldObjectB = MyFieldClassB()
let myFieldObjectA = MyFieldClassA()
let myTypeA = typeof<MyFieldClassA>
let myFieldInfo = myTypeA.GetField "Field"
let myTypeB = typeof<MyFieldClassB>
let myFieldInfo1 = myTypeB.GetField("field", BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"The value of the public field is: '{myFieldInfo.GetValue myFieldObjectA}'"
printfn $"The value of the private field is: '{myFieldInfo1.GetValue myFieldObjectB}'"
Imports System.Reflection
Public Class MyFieldClassA
Public Field As String = "A Field"
End Class
Public Class MyFieldClassB
Private myField As String = "B Field"
Public Property Field() As String
Get
Return myField
End Get
Set(ByVal Value As String)
If myField <> value Then
myField = value
End If
End Set
End Property
End Class
Public Class MyFieldInfoClass
Public Shared Sub Main()
Dim myFieldObjectB As New MyFieldClassB()
Dim myFieldObjectA As New MyFieldClassA()
Dim myTypeA As Type = GetType(MyFieldClassA)
Dim myFieldInfo As FieldInfo = myTypeA.GetField("Field")
Dim myTypeB As Type = GetType(MyFieldClassB)
Dim myFieldInfo1 As FieldInfo = myTypeB.GetField("myField", _
BindingFlags.NonPublic Or BindingFlags.Instance)
Console.WriteLine("The value of the public field is: '{0}'", _
myFieldInfo.GetValue(myFieldObjectA))
Console.WriteLine("The value of the private field is: '{0}'", _
myFieldInfo1.GetValue(myFieldObjectB))
End Sub
End Class
Комментарии
В поиске name
учитывается регистр. Поиск включает открытые статические поля и поля общедоступного экземпляра.
Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает FieldInfo с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type объект представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск в полях ограничения класса.
См. также раздел
Применяется к
GetField(String, BindingFlags)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Выполняет поиск указанного поля, используя заданные ограничения привязки.
public:
abstract System::Reflection::FieldInfo ^ GetField(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo? GetField (string name, System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo GetField (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetField : string * System.Reflection.BindingFlags -> System.Reflection.FieldInfo
Public MustOverride Function GetField (name As String, bindingAttr As BindingFlags) As FieldInfo
Параметры
- name
- String
Строка, содержащая имя искомого поля данных.
- bindingAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающих способ проведения поиска.
-или-
Default для возврата null
.
Возвращаемое значение
Объект, предоставляющий поле, которое соответствует указанным требованиям, если такое свойство найдено; в противном случае возвращается null
.
Реализации
Исключения
name
имеет значение null
.
Примеры
В следующем примере возвращается Type
объект для указанного класса, получается FieldInfo объект для поля, соответствующего указанным флагам привязки, и отображается значение поля.
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyFieldClassA
{
public:
String^ field;
MyFieldClassA()
{
field = "A Field";
}
property String^ Field
{
String^ get()
{
return field;
}
void set( String^ value )
{
if ( field != value )
{
field = value;
}
}
}
};
public ref class MyFieldClassB
{
public:
String^ field;
MyFieldClassB()
{
field = "B Field";
}
property String^ Field
{
String^ get()
{
return field;
}
void set( String^ value )
{
if ( field != value )
{
field = value;
}
}
}
};
int main()
{
try
{
MyFieldClassB^ myFieldObjectB = gcnew MyFieldClassB;
MyFieldClassA^ myFieldObjectA = gcnew MyFieldClassA;
Type^ myTypeA = Type::GetType( "MyFieldClassA" );
FieldInfo^ myFieldInfo = myTypeA->GetField( "field" );
Type^ myTypeB = Type::GetType( "MyFieldClassB" );
FieldInfo^ myFieldInfo1 = myTypeB->GetField( "field", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
Console::WriteLine( "The value of the field is : {0} ", myFieldInfo->GetValue( myFieldObjectA ) );
Console::WriteLine( "The value of the field is : {0} ", myFieldInfo1->GetValue( myFieldObjectB ) );
}
catch ( SecurityException^ e )
{
Console::WriteLine( "Exception Raised!" );
Console::WriteLine( "Message : {0}", e->Message );
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "Exception Raised!" );
Console::WriteLine( "Message : {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception Raised!" );
Console::WriteLine( "Message : {0}", e->Message );
}
}
using System;
using System.Reflection;
public class MyFieldClassA
{
public string Field = "A Field";
}
public class MyFieldClassB
{
private string field = "B Field";
public string Field
{
get
{
return field;
}
set
{
if (field!=value)
{
field=value;
}
}
}
}
public class MyFieldInfoClass
{
public static void Main()
{
MyFieldClassB myFieldObjectB = new MyFieldClassB();
MyFieldClassA myFieldObjectA = new MyFieldClassA();
Type myTypeA = typeof(MyFieldClassA);
FieldInfo myFieldInfo = myTypeA.GetField("Field");
Type myTypeB = typeof(MyFieldClassB);
FieldInfo myFieldInfo1 = myTypeB.GetField("field",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine("The value of the public field is: '{0}'",
myFieldInfo.GetValue(myFieldObjectA));
Console.WriteLine("The value of the private field is: '{0}'",
myFieldInfo1.GetValue(myFieldObjectB));
}
}
open System.Reflection
type MyFieldClassA =
val public Field: string
new () = { Field = "A Field"}
type MyFieldClassB() =
let field = "B Field"
member _.Field
with get () = field
let myFieldObjectB = MyFieldClassB()
let myFieldObjectA = MyFieldClassA()
let myTypeA = typeof<MyFieldClassA>
let myFieldInfo = myTypeA.GetField "Field"
let myTypeB = typeof<MyFieldClassB>
let myFieldInfo1 = myTypeB.GetField("field", BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"The value of the public field is: '{myFieldInfo.GetValue myFieldObjectA}'"
printfn $"The value of the private field is: '{myFieldInfo1.GetValue myFieldObjectB}'"
Imports System.Reflection
Public Class MyFieldClassA
Public Field As String = "A Field"
End Class
Public Class MyFieldClassB
Private myField As String = "B Field"
Public Property Field() As String
Get
Return myField
End Get
Set(ByVal Value As String)
If myField <> value Then
myField = value
End If
End Set
End Property
End Class
Public Class MyFieldInfoClass
Public Shared Sub Main()
Dim myFieldObjectB As New MyFieldClassB()
Dim myFieldObjectA As New MyFieldClassA()
Dim myTypeA As Type = GetType(MyFieldClassA)
Dim myFieldInfo As FieldInfo = myTypeA.GetField("Field")
Dim myTypeB As Type = GetType(MyFieldClassB)
Dim myFieldInfo1 As FieldInfo = myTypeB.GetField("myField", _
BindingFlags.NonPublic Or BindingFlags.Instance)
Console.WriteLine("The value of the public field is: '{0}'", _
myFieldInfo.GetValue(myFieldObjectA))
Console.WriteLine("The value of the private field is: '{0}'", _
myFieldInfo1.GetValue(myFieldObjectB))
End Sub
End Class
Комментарии
В следующей таблице показано, какие члены базового класса возвращаются методами Get
при отражении в типе.
Тип члена | Статические | Нестатическое |
---|---|---|
Конструктор | Нет | Нет |
Поле | Нет | Да. Поле всегда имеет значение hide-by-name-and-signature. |
Событие | Неприменимо | Общее правило системы типов состоит в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение рассматривает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Метод | Нет | Да. Метод (как виртуальный, так и не виртуальный) может иметь значение hide-by-name или hide-by-name-and-signature. |
Вложенный тип | Нет | Нет |
Свойство. | Неприменимо | Общее правило системы типов состоит в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение рассматривает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Функция скрытия по имени и подписи учитывает все части подписи, включая пользовательские модификаторы, типы возвращаемых значений, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события представляют собой скрытие по имени и сигнатуре. Если у вас есть свойство с методом доступа get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.
Настраиваемые атрибуты не являются частью системы общих типов.
BindingFlags Следующие флаги фильтра можно использовать для определения полей, которые следует включить в поиск:
Для получения возврата необходимо указать или
BindingFlags.Instance
BindingFlags.Static
.Укажите
BindingFlags.Public
, чтобы включить открытые поля в поиск.Укажите
BindingFlags.NonPublic
, чтобы включить в поиск не открытые поля (т. е. закрытые, внутренние и защищенные).Укажите
BindingFlags.FlattenHierarchy
, чтобы включитьpublic
иprotected
статические члены вверх по иерархии;private
статические члены в унаследованных классах не включаются.
Для изменения способа работы поиска можно использовать следующие BindingFlags флаги модификаторов:
BindingFlags.IgnoreCase
, чтобы игнорировать регистрname
.BindingFlags.DeclaredOnly
для поиска только в полях, объявленных в Type, а не в полях, которые были просто унаследованы.
Дополнительные сведения см. в разделе System.Reflection.BindingFlags.
Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает FieldInfo с параметрами типа, замененными соответствующими аргументами типа.
Если текущий Type объект представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск в полях ограничения класса.