• 漫话CLR ---- 定制Attribute


       <<CLR via C#>>用了10页纸来讲Attribute,其实重点只有这段话:

    所谓"定制Attribute",就是一个类的实例,它被序列化成为驻留在元数据中的一个字节流.在运行的时候,可以对元数据中包含的字节进行反序列化,从而构造类的一个实例.

      简而言之,就是对一个类的附加描述信息.我个人理解为编译到程序中的"注释".

      这里不打算讨论如何使用Attribute,因为不同的Attribute他的使用方式肯定是不同的,列举其使用方法是MSDN干的事情.

      也不打算说明如何定义你自己的Attribute,因为MSDN上说的比我更加详细.

      我想说的其实就是,纯粹的定制Attribute毛线用都不起,只会给程序集中生成额外的元数据.如果你想找的类似EF中的[Key],使用非托管代码的[DllImport],序列化的特性[Serializable] 等等这些特性,你找错方向了,Attribute实现不了这些功能,真正起作用的是反射.你看到像魔法一样的,只增加一些Attribute,这些类或者方法或者其他什么的就有了使用非托管代码的能力,或者有了序列化的功能,或者自动的进行主键的设置操作,其实没有那么神奇,他们都是反射在背后做的.

      Attribute只是给类,方法,属性这些Type增加了额外的信息.而后通过反射,在运行时取到额外信息(Attribute)的内容,接着再利用反射回来的信息进行操作判断,进行业务逻辑.

      PS:还有编译器...

    /*其实Attribute真的是非常强大的东西,结合反射使用只是其中的一部分,Attitude主要是面向编译器的.AOP编程中的PostSharp就是使用了Attribute.*/
  • 相关阅读:
    ORM是什么?及ORM框架是什么?
    Spring与其两大核心
    装箱和拆箱
    ==和equals的比较
    Vue中ESlint配置文件eslintrc.js文件详解
    RESTful API规范
    CORS跨域djangosetting.py 配置
    LDAP
    模拟浏览器发送请求报文
    学HTTP协议所要知道的基础知识(微总结)
  • 原文地址:https://www.cnblogs.com/woodywu/p/3265036.html
Copyright © 2020-2023  润新知