日期:2014-05-18  浏览次数:20727 次

为什么要用“特性”?优势在那里?
我看到一些程序,用很多的“特性”外完成一些功能,我对“特性”了解不是很深,我想问一下特性的优势在那里?很多特性的功能同样可以用实力话一个类来完成,但是为什么很多时候还是要用“特性”呢?

------解决方案--------------------
特性可以简单的理解成一种类型或其成员自我描述的方式
除了CLR直接支持的几个特性外(SerializableAttribute,MethodImplAttribute等),其他特性大多是通过反射来工作的
特性可以用来标识一些特殊的类或成员(例如:WebMethodAttribute),用于反射查找出这些特殊成员
也可以用来标识一些方法,用于对这个方法所调用的某些特定方法的功能做出某些注入式的修改(例如:TransactionAttribute)
简单的说,特性就是让你的程序看起来更清楚,方法中都作改做的事情,关于验证、权限还有其他一些不需要太关心的并且又有共通处理的事情,全扔到特性里面去

当然,我最喜欢的方式是写一个接口,为成员加上些特性,然后通过Emit动态生成实现这个接口的类,这样代码中就完全不需要实现某些功能的类,而仅仅需要实现这个功能的接口和一些可以特性了,加上一个Emit动态类型的工厂