陈斌彬的技术博客

Stay foolish,stay hungry

PropertyInfo

using System;
using System.Diagnostics;
using System.Globalization;
using System.Runtime.InteropServices;

namespace System.Reflection
{
// 摘要:
//     发现属性 (Property) 的属性 (Attribute) 并提供对属性 (Property) 元数据的访问。
[Serializable]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(_PropertyInfo))]
[ComVisible(true)]
public abstract class PropertyInfo : MemberInfo, _PropertyInfo
{
    // 摘要:
    //     初始化 System.Reflection.PropertyInfo 类的新实例。
    protected PropertyInfo();

    // 摘要:
    //     获取此属性 (Property) 的属性 (Attribute)。
    //
    // 返回结果:
    //     此属性 (Property) 的属性 (Attribute)。
    public abstract PropertyAttributes Attributes { get; }
    //
    // 摘要:
    //     获取一个值,该值指示该属性是否可读。
    //
    // 返回结果:
    //     如果此属性可读,则为 true;否则,为 false。
    public abstract bool CanRead { get; }
    //
    // 摘要:
    //     获取一个值,该值指示此属性是否可写。
    //
    // 返回结果:
    //     如果此属性可写,则为 true;否则,为 false。
    public abstract bool CanWrite { get; }
    //
    // 摘要:
    //     获取一个值,该值指示此属性是否是特殊名称。
    //
    // 返回结果:
    //     如果此属性是特殊名称,则为 true;否则为 false。
    public bool IsSpecialName { get; }
    //
    // 摘要:
    //     获取一个 System.Reflection.MemberTypes 值,该值指示此成员是属性。
    //
    // 返回结果:
    //     指示此成员是属性的 System.Reflection.MemberTypes 值。
    public override MemberTypes MemberType { get; }
    //
    // 摘要:
    //     获取此属性的类型。
    //
    // 返回结果:
    //     此属性的类型。
    public abstract Type PropertyType { get; }

    // 摘要:
    //     返回一个数组,其元素反射了由当前实例反射的属性的公共 get、set 以及其他访问器。
    //
    // 返回结果:
    //     如果找到访问器,此方法将返回一个 System.Reflection.MethodInfo 对象的数组,这些对象反射了由当前实例反射的属性的公共
    //     get、set 以及其他访问器;如果没有找到,此方法将返回包含零 (0) 个元素的数组。
    public MethodInfo[] GetAccessors();
    //
    // 摘要:
    //     返回一个数组,其元素反射了当前实例反射的属性的公共及非公共(如果指定)get、set 以及其他访问器。
    //
    // 参数:
    //   nonPublic:
    //     指示非公共方法是否应在 MethodInfo 数组中返回。如果要包括非公共方法,则为 true;否则,为 false。
    //
    // 返回结果:
    //     一个 System.Reflection.MethodInfo 对象的数组,其元素反射了由当前实例反射的属性的 get、set 及其他访问器。如果
    //     nonPublic 为 true,则此数组包含公共及非公共 get、set 及其他访问器。如果 nonPublic 为 false,则此数组仅包含公共
    //     get、set 及其他访问器。如果没有找到具有指定可见性的访问器,则此方法将返回包含零 (0) 个元素的数组。
    public abstract MethodInfo[] GetAccessors(bool nonPublic);
    //
    // 摘要:
    //     由编译器返回与属性关联的文本值。
    //
    // 返回结果:
    //     一个 System.Object,它包含与此属性关联的文本值。如果文本值是一个元素值为零的类类型,则返回值为 null。
    //
    // 异常:
    //   System.InvalidOperationException:
    //     非托管元数据中的常数表不包含当前属性的常数值。
    //
    //   System.FormatException:
    //     值的类型不是公共语言规范 (CLS) 许可的类型。请参见“ECMA Partition II”(ECMA 第二部分)规范中的“Metadata”(元数据)。
    public virtual object GetConstantValue();
    //
    // 摘要:
    //     返回此属性的公共 get 访问器。
    //
    // 返回结果:
    //     MethodInfo 对象,表示此属性的公共 get 访问器;如果 get 访问器是非公共的或不存在,则为 null。
    public MethodInfo GetGetMethod();
    //
    // 摘要:
    //     当在派生类中重写时,返回此属性的公共或非公共 get 访问器。
    //
    // 参数:
    //   nonPublic:
    //     指示是否应返回非公共 get 访问器。若要返回非公共的访问器则为 true;否则,为 false。
    //
    // 返回结果:
    //     如果 nonPublic 为 true,则返回表示该属性的 get 访问器的 MethodInfo 对象。如果 nonPublic 为 false
    //     且 get 访问器是非公共的,或者如果 nonPublic 为 true 但不存在 get 访问器,则返回 null。
    //
    // 异常:
    //   System.Security.SecurityException:
    //     请求的方法为非公共的,并且调用方不具有对该非公共方法进行反射的 System.Security.Permissions.ReflectionPermission。
    public abstract MethodInfo GetGetMethod(bool nonPublic);
    //
    // 摘要:
    //     当在派生类中重写时,返回此属性的所有索引参数的数组。
    //
    // 返回结果:
    //     ParameterInfo 类型的数组,它包含索引的参数。
    public abstract ParameterInfo[] GetIndexParameters();
    //
    // 摘要:
    //     返回一个类型数组,其中的类型表示属性的可选自定义修饰符。
    //
    // 返回结果:
    //     System.Type 对象的数组,这些对象标识当前属性的可选自定义修饰符(例如 System.Runtime.CompilerServices.IsConst
    //     或 System.Runtime.CompilerServices.IsImplicitlyDereferenced)。
    public virtual Type[] GetOptionalCustomModifiers();
    //
    // 摘要:
    //     由编译器返回与属性关联的文本值。
    //
    // 返回结果:
    //     一个 System.Object,它包含与此属性关联的文本值。如果文本值是一个元素值为零的类类型,则返回值为 null。
    //
    // 异常:
    //   System.InvalidOperationException:
    //     非托管元数据中的常数表不包含当前属性的常数值。
    //
    //   System.FormatException:
    //     值的类型不是公共语言规范 (CLS) 许可的类型。请参见“ECMA Partition II”(ECMA 第二部分)规范中的“Metadata Logical
    //     Format: Other Structures, Element Types used in Signatures”(元数据逻辑格式:其他结构,在签名中使用的元素类型)。
    public virtual object GetRawConstantValue();
    //
    // 摘要:
    //     返回一个类型数组,其中的类型表示属性的必需自定义修饰符。
    //
    // 返回结果:
    //     System.Type 对象的数组,标识当前属性(例如 System.Runtime.CompilerServices.IsConst 或 System.Runtime.CompilerServices.IsImplicitlyDereferenced)需要的自定义修饰符。
    public virtual Type[] GetRequiredCustomModifiers();
    //
    // 摘要:
    //     返回此属性的公共 set 访问器。
    //
    // 返回结果:
    //     如果 set 访问器是公共的,则为表示此属性的 Set 方法的 MethodInfo 对象;如果 set 访问器是非公共的,则为 null。
    public MethodInfo GetSetMethod();
    //
    // 摘要:
    //     当在派生类中重写时,返回此属性的 set 访问器。
    //
    // 参数:
    //   nonPublic:
    //     指示在访问器是非公共的情况下是否应将其返回。若将返回非公共的访问器,则为 true;否则,为 false。
    //
    // 返回结果:
    //     值 条件 表示此属性的 Set 方法的 System.Reflection.MethodInfo 对象。 set 访问器是公共的。 - 或 - nonPublic
    //     为 true,且 set 访问器是非公共的。 nullnonPublic 为 true,但属性是只读的。 - 或 - nonPublic 为 false,且
    //     set 访问器是非公共的。 - 或 - 不存在 set 访问器。
    //
    // 异常:
    //   System.Security.SecurityException:
    //     请求的方法为非公共的,并且调用方不具有对该非公共方法进行反射的 System.Security.Permissions.ReflectionPermission。
    public abstract MethodInfo GetSetMethod(bool nonPublic);
    //
    // 摘要:
    //     用索引化属性的可选索引值返回该属性的值。
    //
    // 参数:
    //   obj:
    //     将返回其属性值的对象。
    //
    //   index:
    //     索引化属性的可选索引值。对于非索引化属性,此值应为 null。
    //
    // 返回结果:
    //     obj 参数的属性值。
    //
    // 异常:
    //   System.ArgumentException:
    //     index 数组不包含所需类型的参数。 - 或 - 未找到该属性的 get 访问器。
    //
    //   System.Reflection.TargetException:
    //     该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。
    //
    //   System.Reflection.TargetParameterCountException:
    //     index 中参数的数目与已编制索引的属性所采用的参数的数目不相符。
    //
    //   System.MethodAccessException:
    //     试图非法访问某类中私有或受保护的方法。
    //
    //   System.Reflection.TargetInvocationException:
    //     检索属性值时出错。例如,为索引属性指定的索引值超出范围。System.Exception.InnerException 属性指示错误的原因。
    [DebuggerHidden]
    [DebuggerStepThrough]
    public virtual object GetValue(object obj, object[] index);
    //
    // 摘要:
    //     在派生类中重写时,返回具有指定绑定、索引和 System.Globalization.CultureInfo 的属性的值。
    //
    // 参数:
    //   obj:
    //     将返回其属性值的对象。
    //
    //   invokeAttr:
    //     调用属性。这必须是 BindingFlags 中的位标志:InvokeMethod、CreateInstance、Static、GetField、SetField、GetProperty
    //     或 SetProperty。必须指定合适的调用属性。如果要调用静态成员,则必须设置 BindingFlags 的 Static 标志。
    //
    //   binder:
    //     一个启用绑定、参数类型强制、成员调用以及通过反射进行 MemberInfo 对象检索的对象。如果 binder 为 null,则使用默认联编程序。
    //
    //   index:
    //     索引化属性的可选索引值。对于非索引化属性,此值应为 null。
    //
    //   culture:
    //     表示要为其本地化资源的区域性的 CultureInfo 对象。请注意,如果没有为此区域性本地化该资源,则在搜索匹配项的过程中将继续调用 CultureInfo.Parent
    //     方法。如果此值为 null,则从 CultureInfo.CurrentUICulture 属性获得 CultureInfo。
    //
    // 返回结果:
    //     obj 的属性值。
    //
    // 异常:
    //   System.ArgumentException:
    //     index 数组不包含所需类型的参数。 - 或 - 未找到该属性的 get 访问器。
    //
    //   System.Reflection.TargetException:
    //     该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。
    //
    //   System.Reflection.TargetParameterCountException:
    //     index 中参数的数目与已编制索引的属性所采用的参数的数目不相符。
    //
    //   System.MethodAccessException:
    //     试图非法访问某类中私有或受保护的方法。
    //
    //   System.Reflection.TargetInvocationException:
    //     检索属性值时出错。例如,为索引属性指定的索引值超出范围。System.Exception.InnerException 属性指示错误的原因。
    public abstract object GetValue(object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture);
    //
    // 摘要:
    //     用索引属性的可选索引值设置该属性的值。
    //
    // 参数:
    //   obj:
    //     将设置其属性值的对象。
    //
    //   value:
    //     此属性的新值。
    //
    //   index:
    //     索引化属性的可选索引值。对于非索引化属性,此值应为 null。
    //
    // 异常:
    //   System.ArgumentException:
    //     index 数组不包含所需类型的参数。 - 或 - 未找到该属性的 set 访问器。
    //
    //   System.Reflection.TargetException:
    //     该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。
    //
    //   System.Reflection.TargetParameterCountException:
    //     index 中参数的数目与已编制索引的属性所采用的参数的数目不相符。
    //
    //   System.MethodAccessException:
    //     试图非法访问某类中私有或受保护的方法。
    //
    //   System.Reflection.TargetInvocationException:
    //     设置属性值时出错。例如,为索引属性指定的索引值超出范围。System.Exception.InnerException 属性指示错误的原因。
    [DebuggerHidden]
    [DebuggerStepThrough]
    public virtual void SetValue(object obj, object value, object[] index);
    //
    // 摘要:
    //     当在派生类中重写时,将给定对象的属性值设置为给定值。
    //
    // 参数:
    //   obj:
    //     将返回其属性值的对象。
    //
    //   value:
    //     此属性的新值。
    //
    //   invokeAttr:
    //     调用属性。这必须是 System.Reflection.BindingFlags 中的位标志:InvokeMethod、CreateInstance、Static、GetField、SetField、GetProperty
    //     或 SetProperty。必须指定合适的调用属性。如果要调用静态成员,则必须设置 BindingFlags 的 Static 标志。
    //
    //   binder:
    //     一个对象,它启用绑定、对参数类型的强制、对成员的调用,以及通过反射对 System.Reflection.MemberInfo 对象的检索。如果
    //     binder 为 null,则使用默认联编程序。
    //
    //   index:
    //     索引化属性的可选索引值。对于非索引化属性,此值应为 null。
    //
    //   culture:
    //     表示要为其本地化资源的区域性的 System.Globalization.CultureInfo 对象。请注意,如果没有为此区域性本地化该资源,则在搜索匹配项的过程中将继续调用
    //     CultureInfo.Parent 方法。如果此值为 null,则从 CultureInfo.CurrentUICulture 属性获得 CultureInfo。
    //
    // 异常:
    //   System.ArgumentException:
    //     index 数组不包含所需类型的参数。 - 或 - 未找到该属性的 set 访问器。
    //
    //   System.Reflection.TargetException:
    //     该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。
    //
    //   System.Reflection.TargetParameterCountException:
    //     index 中参数的数目与已编制索引的属性所采用的参数的数目不相符。
    //
    //   System.MethodAccessException:
    //     试图非法访问某类中私有或受保护的方法。
    //
    //   System.Reflection.TargetInvocationException:
    //     设置属性值时出错。例如,为索引属性指定的索引值超出范围。System.Exception.InnerException 属性指示错误的原因。
    public abstract void SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture);
}
}