导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Type.GetProperty 方法 (String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

2013/12/13

使用指定的绑定约束,搜索参数与指定的参数类型及修饰符匹配的指定属性。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public PropertyInfo GetProperty(
	string name,
	BindingFlags bindingAttr,
	Binder binder,
	Type returnType,
	Type[] types,
	ParameterModifier[] modifiers
)

参数

name
类型: System.String
包含要获取的属性名的 String
bindingAttr
类型: System.Reflection.BindingFlags
一个位掩码,由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零,以返回 null
binder
类型: System.Reflection.Binder
一个 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
表示符合指定要求的属性的 PropertyInfo 对象(如果找到的话);否则为 null

实现

IReflect.GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

异常条件
AmbiguousMatchException

找到多个有指定名称且与指定绑定约束匹配的属性。

ArgumentNullException

namenull

- 或 -

typesnull

ArgumentException

types 是多维的。

- 或 -

modifiers 是多维的。

- 或 -

typesmodifiers 的长度不同。

NullReferenceException

types 的一个元素为 null

如果属性至少有一个为公共的访问器,则该属性被视为对于反射是公共的。否则,该属性被视为私有,而且您必须使用 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static(在 Visual Basic 中,使用 Or 将多个值合并在一起)来获取它。

虽然默认联编程序不处理 ParameterModifiermodifiers 参数),但您可以使用抽象 System.Reflection.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用,而且仅处理通过引用传递的参数。

下表显示当反映到某个类型时,Get 方法返回基类的哪些成员。

成员类型

静态

非静态

构造函数

字段

是。字段总是按名称和签名隐藏。

事件

不适用

常规类型系统规则是:该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

方法

是。方法(虚方法和非虚方法)可按名称隐藏或按名称和签名隐藏。

嵌套类型

属性

不适用

常规类型系统规则是:该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

说明:

  1. 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射,属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性,但派生类中仅有 get 访问器,则派生类属性隐藏基类属性,并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

types 数组和 modifiers 数组的长度相同。types 数组中指定的参数可具有下列在 modifiers 数组中指定的特性:pdIn、pdOut、pdLcid、pdRetval、pdOptional 和 pdHasDefault,它们分别表示 [In]、[Out]、[lcid]、[retval]、[optional] 和一个指定参数是否有默认值的值。参数的关联特性存储在元数据中并且增强了交互操作。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的属性:

  • 为了获取返回值,必须指定 BindingFlags.InstanceBindingFlags.Static

  • 指定 BindingFlags.Public 可在搜索中包含公共属性。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共属性(即私有属性和受保护的属性)。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 publicprotected 静态成员;不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式:

  • BindingFlags.IgnoreCase,表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly,表示仅搜索 Type 上声明的属性,而不搜索被简单继承的属性。

有关更多信息,请参见 System.Reflection.BindingFlags

如果当前 Type 表示某种已构造的泛型类型,则此方法将返回 PropertyInfo,并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则此方法搜索类约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 具有用来访问索引属性的简化语法,并允许将一个索引属性设为其类型的默认属性。例如,如果变量 myList 引用 List<T>,则语法 myList[3] (在 Visual Basic 中为 myList(3))将检索索引为 3 的元素。您可以重载该属性。

在 C# 中,此功能称为索引器,而且不能按名称引用。默认情况下,C# 索引器在元数据中显示为具有“Item”名称的索引属性。但是,类库开发人员可以使用 IndexerNameAttribute 特性来更改元数据中索引器的名称。例如,String 类具有一个名为 Chars 的索引器。使用 C# 以外的语言创建的索引属性可以具有“Item”以外的名称。

若要确定某个类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法来测试 DefaultMemberAttribute 特性。如果该类型具有 DefaultMemberAttribute,则 MemberName 属性返回默认属性的名称。

版本说明

Windows Phone

 types 包含 null 元素时,GetProperty 会引发 NullReferenceException 而不是 ArgumentNullException

Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2014 Microsoft