Source:Type.cs
Source:Type.cs
Source: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。
返回
FieldInfo
表示符合指定要求的字段的对象(如果找到的话);否则为 null。
实现
GetField(String, BindingFlags)
GetField(String, BindingFlags)
例外
ArgumentNullException
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
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
let myFieldInfo = myTypeA.GetField "Field"
let myTypeB = typeof
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 的基类成员。
成员类型
静态
非静态
构造函数
否
否
字段
否
可以。 字段始终按名称和签名隐藏。
事件
不适用
常见类型系统规则是继承与实现 属性的方法的继承相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的注释 2。
方法
否
可以。 (虚拟和非虚拟) 的方法可以是按名称隐藏或按名称和签名隐藏。
嵌套类型
否
否
properties
不适用
常见类型系统规则是继承与实现 属性的方法的继承相同。 反射将属性视为按名称和签名隐藏。 请参阅下面的注释 2。
按名称和签名隐藏考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、sentinels 和非托管调用约定。 这是二进制比较。
对于反射,属性和事件按名称和签名隐藏。 如果在基类中具有同时具有 get 和 set 访问器的属性,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且您将无法访问基类上的 setter。
自定义属性不是通用类型系统的一部分。
以下 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 表示泛型类型或泛型方法定义中的类型参数,则此方法将搜索类约束的字段。
另请参阅
FieldInfo
String
BindingFlags
DefaultBinder
GetFields()
适用于