System.Type.GetProperty 方法
本文提供了此 API 参考文档的补充说明。
GetProperty(String) 方法
搜索 name
区分大小写。 搜索包括公共静态和公共实例属性。
如果属性至少有一个访问器是公共的,则将其视为公共的反射。 否则,该属性被视为私有属性,并且必须使用BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static(在 Visual Basic 中,将值组合在一Or
起)来获取它。
如果当前 Type 表示构造的泛型类型,此方法将返回 PropertyInfo 由相应类型参数替换的类型参数。
如果当前 Type 表示泛型类型或泛型方法定义中的类型参数,此方法将搜索类约束的属性。
发生 AmbiguousMatchException 的情况包括:
- 类型包含两个具有相同名称但不同数量的参数的索引属性。 若要解决歧义,请使用指定参数类型的方法的 GetProperty 重载。
- 派生类型使用修饰符
Shadows
(在 Visual Basic 中)声明一个属性,new
该属性隐藏具有相同名称的继承属性。 若要解决歧义,请使用 GetProperty(String, BindingFlags) 方法重载并添加 BindingFlags.DeclaredOnly 标志以将搜索限制为未继承的成员。
GetProperty(String, BindingFlags) 方法
如果属性至少有一个访问器是公共的,则将其视为公共的反射。 否则,该属性被视为私有属性,并且必须使用BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static(在 Visual Basic 中,将值组合在一Or
起)来获取它。
以下 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 表示泛型类型或泛型方法定义中的类型参数,此方法将搜索类约束的属性。
发生 AmbiguousMatchException 的情况包括:
- 类型包含两个具有相同名称但不同数量的参数的索引属性。 若要解决歧义,请使用指定参数类型的方法的 GetProperty 重载。
- 派生类型声明一个属性,该属性使用
new
修饰符(Shadows
在 Visual Basic 中)隐藏具有相同名称的继承属性。 若要解决歧义,请包括 BindingFlags.DeclaredOnly 将搜索限制为未继承的成员。
GetProperty(System.String,System.反应离子。BindingFlags,System。反应。Binder,System.Type,System.Type[],System.反应。ParameterModifier[])
如果属性至少有一个访问器是公共的,则将其视为公共的反射。 否则,该属性被视为私有属性,并且必须使用BindingFlags.NonPublic | | BindingFlags.InstanceBindingFlags.Static(在 Visual Basic 中,将值组合在一Or
起)来获取它。
尽管默认联编程序不处理 ParameterModifier ( modifiers
参数),但可以使用抽象 System.Reflection.Binder 类编写一个处理自定义 modifiers
联编程序。 ParameterModifier
仅在通过 COM 互操作调用时使用,并且仅处理通过引用传递的参数。
下表显示了在反映类型时方法返回 Get
的基类成员。
成员类型 | 静态 | 非静态 |
---|---|---|
构造函数 | 否 | 否 |
字段 | 否 | 是的。 字段始终是按名称和签名隐藏的。 |
活动 | 不适用 | 常见的类型系统规则是继承与实现属性的方法相同。 反应ion 将属性视为按名称隐藏和签名。2 |
方法 | 否 | 是的。 方法(虚拟和非虚拟)可以是按名称隐藏或按名称隐藏和签名。 |
嵌套类型 | 否 | 否 |
properties | 不适用 | 常见的类型系统规则是继承与实现属性的方法相同。 反应ion 将属性视为按名称隐藏和签名。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 表示构造的泛型类型,此方法将返回 PropertyInfo 由相应类型参数替换的类型参数。
如果当前 Type 表示泛型类型或泛型方法定义中的类型参数,此方法将搜索类约束的属性。
索引器和默认属性
Visual Basic、C# 和 C++ 简化了用于访问索引属性的语法,并允许一个索引属性作为其类型的默认值。 例如,如果变量 myList
引用了一个 ArrayList,则语法 myList[3]
(myList(3)
在 Visual Basic 中)检索索引为 3 的元素。 可以重载属性。
在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为 <Item
名称。
若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 该方法测试 DefaultMemberAttribute 属性。 如果该类型具有 DefaultMemberAttribute,则 MemberName 属性返回默认属性的名称。