C# 定制 Attribute 简单使用
所谓 “定制Attribute”,就是一个类的实例,它被序列化成驻留在元数据的一个字节流。
我们可以使用 Attribute 来保存注释:
namespace AttributeDemo
{
[AttributeUsage(AttributeTargets.Method,Inherited=false,AllowMultiple=true)]
public class HistoryAttribute:Attribute
{
public HistoryAttribute()
{ }
public HistoryAttribute(string Author, string UpdateDate, string Description)
{
this.Author = Author;
this.UpdateDate = UpdateDate;
this.Description = Description;
} public string Author { get; set; }
public string UpdateDate { get; set; }
public string Description { get; set; } }
}
在指定的方法上应用特性:
public class TestClass
{
[History("B_Z", "2013-12-30", "新建")]
[History("B_Z","2013-12-31","修改")] public void Test()
{ }
}
然后,我们就可以利用反射来获取注释的内容:
public static void AttributeTestI()
{ //利用反射获取类型的方法
MemberInfo[] members = typeof(TestClass).FindMembers(MemberTypes.Method | MemberTypes.Constructor,
BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static |
BindingFlags.DeclaredOnly, Type.FilterName, "*");
foreach (var m in members)
{
Attribute[] attributes = Attribute.GetCustomAttributes(m);
foreach (var A in attributes)
{
HistoryAttribute history = A as HistoryAttribute;
if (history != null)
{
Console.WriteLine("Author:{0},UpdateDate:{1},Description:{2}", history.Author, history.UpdateDate, history.Description);
}
}
}
Console.Read();
}
我也可以通过 “ISDefined” 来判断对象是否应用了指定的特性:
public static void AttributeTestII()
{
//判断该类型是否应用了HistoryAttribute特性
if (typeof(TestClass).IsDefined(typeof(HistoryAttribute), false))
{
//如果是执行代码
Console.WriteLine("如果是执行代码A");
}
else
{
//如果不是则执行其他代码
Console.WriteLine("如果不是执行代码B");
}
Console.Read();
}
以上就是个人对于定制 Attribute 的简单理解。
欢迎指教。
C# 定制 Attribute 简单使用的更多相关文章
- D2010 RTTI + Attribute 简单实现ORM
还记得David I 今年四月来盛大时,被问及“反射机制能再做得好一点吗?我们想放弃RTTI”,David I 回答“这的确是需要考虑的地方,当然RTTI我们不会放弃的”.(这个白胡子的老哥哥还真很可 ...
- [Clr via C#读书笔记]Cp18 定制Attribute
Cp18 定制Attribute 意义 利用Attribute,可以声明性的给自己的代码结构创建注解,从而实现一些特殊的功能:最终在元数据中生成,这种可扩展的元数据信息可以在运行时的时候查询,从而动态 ...
- 定制Attribute
目录 Attribute是什么 自定义Attribute 一.Attribute是什么 将一些附加信息与制定目标相关联的方式.编译器在元数据中生成这些额外的信息.也叫做特性. 比如之前文章中提到的:枚 ...
- Delphi2010 RTTI + Attribute 简单实现ORM实例
1.支持ORM,最基础的两个信息是表的信息和字段信息.这两个信息,如果用Attribute 来辅助,代码更简洁和可读性更好.可以把属性名当做真实字段名,也可以将特性里的属性当成真实姓名,再加上字段标题 ...
- C#提高------------------------Attribute自定制概念
C#基础知识梳理系列八:定制特性Attribute 摘 要 设计类型的时候可以使用各种成员来描述该类型的信息,但有时候我们可能不太愿意将一些附加信息放到类的内部,因为这样,可能会给类型本身的信息描 ...
- 定制一个支持中英文的简单LaTex模板
平常写汇报文档什么的,word排版有时还是比较费劲,遂定制一个简单的LaTex模板,中文默认为宋体,英文为LaTex默认字体,支持彩色高亮展示,有目录书签,有页眉展示,大致如下: LaTex代码如下: ...
- Attribute
Attribute介绍 咱们来说Attribute,他是一个类,所以自定义的Attribute都是继承自System.Attribute,一般命名的时候都是以Attribute结尾.在使用的时候我们可 ...
- 有关C#标签Attribute的熟悉
Attribute 简单用法: 最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAt ...
- [CLR via C#]18. Attribute
attribute可以说是Microsoft .NET Framework提出的最具创意的技术之一了.利用attribute,可以声明性的为自己的代码构造添加注解,从而实现一些特殊的功能.attrib ...
随机推荐
- java web项目中 获取resource路径下的文件路径
public GetResource{ String path = GetResource.class.getClassLoader().getResource("xx/xx.txt&quo ...
- HDU 2509 nim博弈
Be the Winner Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- sql语句与数据库2
增加数据 insert into wyx(xh,nl,xb,sfzh,zcrq)values(0422,28,男,210623198711111111,2016-8-19); 删除数据 delete ...
- Objective-c——UI基础开发第十二天(相册展示)
一.知识点 模仿新特性 UICollectionViewFlowLayout自定义布局 相册 瀑布流(淘宝购物之类的 二.复习 a.UICollectionView 和 tableview共享一套AP ...
- Ant——ant的使用
---------------------------------------------------------------------------------------------------- ...
- python request属性及方法说明
if request.REQUEST.has_key('键值'): HttpRequest对象的属性 参考: 表 H-1. HttpRequest对象的属性 属 性 描述 path 表示提 ...
- mac10.9下eclipse的storm开发环境搭建
--------------------------------------- 博文作者:迦壹 博客地址:http://idoall.org/home.php?mod=space&uid=1& ...
- 三、Spring——数据访问
1.Spring 对 DAO的支持 Spring支持目前大多数常用的数据持久化技术,Spring定义了一套面向DAO层的异常体系,并未各种支持的持久化技术提供了异常转换器.这样,我们在设计DAO接口时 ...
- [zz]The Royal Treatment
http://www.cgw.com/Publications/CGW/2012/Volume-35-Issue-4-June-July-2012/The-Royal-Treatment.aspx T ...
- C#中Monitor类、Lock关键字和Mutex类
线程:线程是进程的独立执行单元,每一个进程都有一个主线程,除了主线程可以包含其他的线程.多线程的意义:多线程有助于改善程序的总体响应性,提高CPU的效率.多线程的应用程序域是相当不稳定的,因为多个线程 ...