System.Type.GetProperty 方法 (String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
方法描述
使用指定的绑定约束,搜索参数与指定的参数类型及修饰符匹配的指定属性。
语法定义(C# System.Type.GetProperty 方法 (String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) 的用法)
public PropertyInfo GetProperty( string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers )
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
name | System-String | 包含要获取的属性名的字符串。 |
bindingAttr | System-Reflection-BindingFlags | 一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。- 或 -零,以返回 null。 |
binder | System-Reflection-Binder | 一个对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。- 或 -空引用(Visual Basic 中为 Nothing)将使用 DefaultBinder。 |
returnType | System-Type | 属性的返回类型。 |
types | System-Type[] | 一个 Type 对象数组,表示要获取的索引属性的参数的数目、顺序和类型。- 或 -获取未被索引的属性的 Type 类型的空数组(即 Type[] types = new Type[0])。 |
modifiers | System-Reflection-ParameterModifier[] | ParameterModifier 对象数组,表示与 types 数组中的相应元素关联的特性。默认的联编程序不处理此参数。 |
返回值 | System.Reflection.PropertyInfo | 表示符合指定要求的属性的对象(如果找到的话);否则为 null。 |
提示和注释
如果属性至少有一个为公共的访问器,则该属性被视为对于反射是公共的。 否则,该属性将被视为私有,您必须使用 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (在 Visual Basic 中,使用 Or 来组合值)以获取它。
虽然默认联编程序不处理 ParameterModifier(modifiers 参数),但您可以使用抽象 System.Reflection.Binder 类编写确实处理 modifiers 的自定义联编程序。 ParameterModifier 仅当通过 COM 互操作进行调用时才使用,而且仅处理通过引用传递的参数。
下表显示在某个类型上进行反射时,Get 方法返回的基类的成员。
成员类型
Static
非静态
构造函数
否
否
字段
否
是。 字段总是按名称和签名隐藏。
Event
不适用
常规类型系统规则是:该继承与实现属性的方法的继承相同。 反射将属性视为按名称和签名隐藏。 请参见下面的“注意 2”。
方法
否
是。 方法(虚方法和非虚方法)可按名称隐藏或按名称和签名隐藏。
嵌套类型
否
否
Property
不适用
常规类型系统规则是:该继承与实现属性的方法的继承相同。 反射将属性视为按名称和签名隐藏。 请参见下面的“注意 2”。
按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。 这是二进制比较。
对于反射,属性和事件按名称和签名隐藏。 如果基类中有同时带 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 表示某种已构造的泛型类型,则此方法将返回 PropertyInfo,并且其类型参数由相应的类型参数替换。
如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则此方法搜索类约束的属性。
索引器和默认属性
Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法,并允许将一个索引属性设为其类型的默认属性。 例如,如果变量 myList 引用 ArrayList,则语法 myList[3] (在 Visual Basic 中为 myList(3))将检索索引为 3 的元素。 可以重载该属性。
在 C# 中,此功能称为索引器,而且不能按名称引用。 默认情况下,C# 索引器在元数据中显示为具有“Item”名称的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。 例如,String 类具有一个名为 Chars 的索引器。使用 C# 以外的语言创建的索引属性可以具有“Item”以外的名称。
若要确定某个类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。 如果该类型具有 DefaultMemberAttribute,则 MemberName 属性返回默认属性的名称。
System.Type.GetProperty 方法 (String, BindingFlags, Binder, Type, Type[], ParameterModifier[])例子
异常
异常 | 异常描述 |
---|---|
AmbiguousMatchException | 找到多个有指定名称且与指定绑定约束匹配的属性。 |
ArgumentNullException |
|
ArgumentException |
|
NullReferenceException | types 的一个元素为 null。 |
版本信息
.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。