Attribute:

公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。

使用Attribute的一般方式:

1)在程序集、类、域、方法等前面用[]表示;

2)可以带参数:位置参数(相当于构造方法带的参数)

命名参数(域名或属性名-值)

1.声明Attribute类:

因为attribute从System.Attribute继承而来,名字要用xxxAttribute格式,不然编译器不能识别。

2.使用Attribute类:

1)在类及成员上面使用方括号;

2)可以省略后最Attribute;

3.通过反射访问属性:

能够知道程序中的信息。

代码示例:

using System;
using System.Reflection; [AttributeUsage(AttributeTargets.Class
| AttributeTargets.Method ,
AllowMultiple = true)]
public class HelpAttribute : System.Attribute
{
public readonly string Url;
private string topic;
public string Topic // 属性 Topic 是命名参数
{
get
{
return topic;
}
set
{
topic = value;
}
}
public HelpAttribute(string url) // url 是位置参数
{
this.Url = url;
}
} [HelpAttribute("http://msvc/MyClassInfo", Topic="Test"),
Help("http://my.com/about/class")]
class MyClass
{
[Help("http;//my.com/about/method")]
public void MyMethod(int i)
{
return;
}
} public class MemberInfo_GetCustomAttributes
{
public static void Main()
{
Type myType = typeof(MyClass); //查看Attribute信息
object[] attributes = myType.GetCustomAttributes(false);
for (int i = ; i < attributes.Length; i ++)
{
PrintAttributeInfo(attributes[i]);
} MemberInfo[] myMembers = myType.GetMembers();
for(int i = ; i < myMembers.Length; i++)
{
Console.WriteLine("\nNumber {0}: ", myMembers[i]);
Object[] myAttributes = myMembers[i].GetCustomAttributes(false);
for(int j = ; j < myAttributes.Length; j++)
{
PrintAttributeInfo( myAttributes[j] );
}
}
} static void PrintAttributeInfo( object attr )
{
if( attr is HelpAttribute )
{
HelpAttribute attrh = (HelpAttribute) attr;
Console.WriteLine( "----Url: " + attrh.Url + " Topic: " + attrh.Topic );
Console.ReadKey(true);
}
}
}

C#高级特性_Attribute的更多相关文章

  1. ActiveMQ中的Destination高级特性(一)

    ---------------------------------------------------------------------------------------- Destination ...

  2. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

  3. 云端卫士实战录 | Java高级特性之多线程

    <实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...

  4. javascript高级特性

    01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...

  5. Visual Studio 2015 速递(4)——高级特性之移动开发

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  6. Android TextView高级特性使用

    TextView一般都是用来显示一段文本,这里说的高级特性主要是一些我们平常不太常用的属性.包括文字阴影.自定义字体.html嵌入多格式.字体加粗.插入图片.这些特性平时开发APP的时候,可能一般使用 ...

  7. Python的高级特性8:你真的了解类,对象,实例,方法吗

    Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...

  8. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  9. VQuery高级特性

    VQuery高级特性 css方法 同时设置多个--for in 链式操作 链式操作 函数,链式操作 css 方法链式操作 json的使用 阻止冒泡,默认事件 VQuery插件 插件机制 可以扩展库的功 ...

随机推荐

  1. javascript刷新父页面的内容

    适应于超级链接和弹出窗口 function RefreshParent() {     if (window.opener != null) {                             ...

  2. @RestController注解下返回到jsp视图页面

    spring4.1中添加了@RestController注解很方便,集成了@ResponseBody注解,无需再在每个方法前添加了..但是却发现个问题..之前用@Controller注解的时候经常会如 ...

  3. FineReport集成到AWS系统中的方案

    本人实施了北京炎黄盈动的BPM及OA系统,主要目标是对业务流程进行控制和管理,加快Oracle JDE的业务前端录单速度和弥补JDE在流程控制方面的不足,实现BPM数据能与JDE无缝互相结合,经过3个 ...

  4. AI (Adobe Illustrator)详细用法(四)

    本节主要是介绍和形状相关的操作. 一.外观面板的使用 熟悉外观面板的使用很重要. 1.新增描边 外观面板可以让我们增加多个描边. 点击“新增描边”,系统自动添加一个描边. 选中文字,新增描边,可以修改 ...

  5. Objective-C if语句处理 BOOL值不为1和0的情况

    BOOL ,布尔值,在Objective-C ,BOOL类型被typedef为signed char(有符号的整型),YES被#define为1,NO被#define为0. 事实上,xcode的编译器 ...

  6. 2014 UESTC暑前集训搜索专题解题报告

    A.解救小Q BFS.每次到达一个状态时看是否是在传送阵的一点上,是则传送到另一点即可. 代码: #include <iostream> #include <cstdio> # ...

  7. AC日记——字符串最大跨距 openjudge 1.7 26

    26:字符串最大跨距 总时间限制:  1000ms 内存限制:  65536kB 描述 有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10.想检测S1和S2是否同时在S中 ...

  8. [No00003C]操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore

    操作系统Operating Systems进程同步与信号量Processes Synchronization and Semaphore 进程合作:多进程共同完成一个任务 从纸上到实际:生产者− − ...

  9. eclipse无法导入Android工程的现象与解决办法

    最近在新导入一个Android工程时遇见了已有工程无法导入的情况.具体的现象就是每次导入时的导入窗口很快消失,而在eclipse的package explorer中却没有增加新导入的工程文件夹,没有其 ...

  10. C# winform生成天气预报(转)

    原文地址 http://www.cnblogs.com/ChowYy/p/3382216.html?utm_source=tuicool&utm_medium=referral 项目需要,然后 ...