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 ... 
随机推荐
- IIS 发布网站 ashx无法访问
			IIS6 问题 1.是否安装相应的.net版本 2.查看.net版本是否一致 3.查看web 服务扩展中.net版本是否允许. 4.添加相应的MIME类型文件 在IIS中右键网站→属性→主目录→配置→ ... 
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
			循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ... 
- MyBatis架构(转)
			本文来自http://www.bubuko.com/infodetail-549184.html 如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处 ... 
- 怎样创建FTP服务器
			怎样创建FTP服务器 2008-05-06 08:42永远的探索|分类:操作系统/系统故障| 浏览6382次 我准备用局域网内的一台机器做FTP服务器,创建FTP服务器一定要用Windows serv ... 
- ASP.NET MVC : Action过滤器(Filtering)
			http://www.cnblogs.com/QLeelulu/archive/2008/03/21/1117092.html ASP.NET MVC : Action过滤器(Filtering) 相 ... 
- JavaScript 字符串转日期
			一.将字符串装换为日期 var date= new Date(Date.parse(strTime.replace(/-/g, "/"))); //转换成Data(); 
- mybatis 使用记录
			首先,贴一个好文.把mybatis中的<if></if>的条件扒到源码分析了一遍.PS:目前还看不懂... http://cheng-xinwei.iteye.com/blog ... 
- 使用C#访问SQLLite
			1.SQLLite如何集成在C#中 2.相关C#与SQLLite资源,及说明 3.简单示例 
- JavaScript插件架构
			1.HTML布局规则 默认情况下,所有的插件都可以通过设置特定的HTML代码和相应的属性来实现.也就是说,在网页加载的时候,JavaScript代码会自动检测这些标记,并自动绑定相应的事件,而无需添加 ... 
- mybatis配置优化
			1.加入日志log4j 1)加入jar包:log4j-1.2.17.jar 2)加入log4j配置文件: 可以使properties或者xml形式 log4j.rootLogger = DEBUG,C ... 
