当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在.NET运行时了解类型信息(3)

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 在.NET运行时了解类型信息(3)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 42 ::
收藏到网摘: n/a

访问自定义属性当属性与程序元素相关联后,可以使用反射来查询它们是否存在以及它们的值。用于查询属性的主要反射方法包含在 System.Reflection.MemberInfo.GetCustomAttributes 和 System.Reflection.Assembly.GetCustomAttributes 中。 自定义属性的可访问性根据附加该属性的程序集来进行检查。这相当于检查附加自定义属性的程序集中的类型上的方法是否可以调用自定义属性的构造函数。 诸如 System.Reflection.Assembly.GetCustomAttributes(Type, Boolean) 等方法检查类型参数的可见性和可访问性。只有包含用户定义类型的程序集中的代码才能使用 GetCustomAttributes 检索该类型的自定义属性。 以下代码示例是典型的自定义属性设计模式。它说明运行库自定义属性反射模型。[C#]System.DLLpublic class DescriptionAttribute : Attribute{} System.Web.DLL internal class MyDescriptionAttribute : DescriptionAttribute { } public class LocalizationExtenderProvider { [MyDescriptionAttribute(...)] public CultureInfo GetLanguage(...) { }}如果试图为附加到 GetLanguage 方法的公共自定义属性类型 DescriptionAttribute 检索自定义属性,运行库将执行以下操作: 运行库检查 Type.GetCustomAttributes(Type type) 的 DescriptionAttribute 类型参数是否为公共的,并检查其是否可见或可以访问。 运行库检查从 DescriptionAttribute 导出的用户定义类型 MyDescriptionAttribute 在 System.Web.DLL 程序集(它在该程序集中附加到 GetLanguage() 方法)内是否可见和可以访问。 运行库检查 MyDescriptionAttribute 的构造函数是否在 System.Web.DLL 程序集中可见和可以访问。 运行库调用带有自定义属性参数的 MyDescriptionAttribute 的构造函数,然后将新对象返回给调用方。 自定义属性反射模型可能会在定义类型的程序集外泄漏用户定义类型的实例。这与运行库系统库中返回用户定义类型的实例的成员(例如返回 RuntimeMethodInfo 对象数组的 Type.GetMethods())相同。为了防止客户端发现关于用户定义的自定义属性类型的信息,请将该类型的成员定义为非公共成员。以下代码示例说明使用反射访问自定义属性的基本方法。 [C#]class MainClass { public static void Main() { System.Reflection.MemberInfo info = typeof(MyClass); object[] attributes = info.GetCustomAttributes(); for (int i = 0; i < attributes.Length; i ++) { System.Console.WriteLine(attributes[i]); } }}指定完全限定的类型名称要为各种反射操作提供有效的输入,必须指定类型名称。完全限定的类型名称包含程序集名称指定、命名空间指定和类型名称。类型名称指定将由 Type.GetType、Module.GetType、ModuleBuilder.GetType 和 Assembly.GetType 来使用。类型名称的 Backus-Naur 形式语法Backus-Naur 形式 (BNF) 定义正式语言的语法。下表中的 BNF 词法规则将说明如何识别有效的输入。最终元素(无法再减小的元素)将全部以大写字母显示。非最终元素(可以再减小的元素)则显示为大小写混合或带单引号的字符串,但单引号 (') 不是语法本身的一部分。管道字符 (|) 表示具有子规则的规则。完全限定类型名称的 BNF 语法TypeSpec := ReferenceTypeSpec | SimpleTypeSpecReferenceTypeSpec := SimpleTypeSpec '&'SimpleTypeSpec := PointerTypeSpec | ArrayTypeSpec | TypeNamePointerTypeSpec := SimpleTypeSpec '*'ArrayTypeSpec := SimpleTypeSpec '[ReflectionDimension]' | SimpleTypeSpec '[ReflectionEmitDimension]'ReflectionDimension := '*' | ReflectionDimension ',' ReflectionDimension | NOTOKENReflectionEmitDimension := '*' | Number '..' Number | Number '...' | ReflectionDimension ',' ReflectionDimension | NOTOKENNumber := [0-9]+TypeName := NamespaceTypeName | NamespaceTypeName ',' AssemblyNameSpecNamespaceTypeName := NestedTypeName | NamespaceSpec '.'NestedTypeNameNestedTypeName := IDENTIFIER | NestedTypeName '+' IDENTIFIERNamespaceSpec := IDENTIFIER | NamespaceSpec '.'IDENTIFIERAssemblyNameSpec := IDENTIFIER | IDENTIFIER ',' AssemblyPropertiesAssemblyProperties := AssemblyProperty | AssemblyProperties ',' AssemblyPropertyAssemblyProperty := AssemblyPropertyName '=' AssemblyPropertyValue指定特殊字符在 TypeName 中,IDENTIFIER 是由语言规则所确定的任何有效名称。反斜杠 (\) 可用作转义符来分隔以下用作 IDENTIFIER 一部分的标记。标记含义\,程序集分隔符。\+嵌套类型分隔符。\&引用类型。\*指针类型。\[数组维度分隔符。\]数组维度分隔符。\.只有在数组指定中使用句点时,才应在句点前使用反斜杠。NamespaceSpec 中的句点不采用反斜杠。\\用作字符串的反斜杠。请注意,在除 AssemblyNameSpec 之外的所有 TypeSpec 组成部分中,空格都是相关的。在 AssemblyNameSpe'