.net中的attribute是否可以认为就是.net 的aop实现!?

也许在这里谈.net有点大逆不道。不过我觉得,aop的原理确实和.net attribute很相似
先来看看attribute的作用


Microsoft在.Net框架中引入了attribute,这是一种给运行时实体附加“声明性信息(declarative information)”,也称元数据的方法。可以附加attribute的实体包括:类、方法、property、类变量等。在.Net中,还可以给assembly附加attribute,不同类型的attribute描述了assembly不同方面的信息。如:身份类attribute用来描述该assembly的识别特征(名称、版本等),信息类attribute用来提供更多的产品与公司信息,声明类attribute用来描述配置信息,强名称attribute用来描述assembly是否使用了公共密钥加密的签名。应用程序能够在运行时读取这些信息,根据这些信息来控制自身与诸如序列化、安全等服务的交互作用方式。

摘自 http://www.csdn.net/develop/article/22/22566.shtm

继续上文,后面举了个例子Serializable。在.net里是通过增添一个属性来完成(java是通过一个标记接口来完成,我甚至认为java的public interface Serializable {}就是一种比较阳春的AOP实现)。


所以我觉得.net attribute基本上就可以认为是一种在.net上aop实现。

我觉得大概不算是吧。
aop的特征应该是非侵入性的,比如mixin,是在不需要改变目标模块代码的基础上增加功能。
而Serializable明显需要在每个支持它的类上implements一下。
attribute应该也一样。
这就不能算aop了。

其实,类似的还有javadoc的注释以及java1.5里面的annotation。都是给一个实体加入附加信息。但是因为这些“加入”动作是在实体本身上进行,而不是从外面织入,所以就不算。