4.0 特性

1 特性attribute,和注释有什么区别 2 声明和使用attribute,AttributeUsage 3 运行中获取attribute:额外信息 额外操作 4 Remark封装、attribute验证 特性是无处不在 EF--MVC--WCF-WebService--UnitTest--IOC--AOP--SuperSocket 特性很厉害,加了特性之后,就有很厉害的功能 [Obsolete]编译时就有提示 影响了编译器 [Serializable]对象就可以序列化 影响了程序运行 特性attribute;就是一个类,直接继承/间接继承自Attribute父类 约定俗成用Attribute结尾,标记时就可以省略掉 可以用中括号包裹,然后标记到元素,其实就是调用构造函数 然后可以指定属性 字段 AttributeUsage特性,影响编译器运行, 指定修饰的对象---能否重复修饰--修饰的特性子类是否生效 建议是明确约束用在哪些对象的 自定义的特性,好像毫无意义, 那框架提供的特性究竟是怎么产生价值的呢?! [Obsolete][AttributeUsage] 影响了编译器,这属于系统内置,我们搞不了 反编译之后,发现特性会在元素内部生成 .custom的东西 但是这个东西我们C#访问不到------简直可以理解为,特性没有产生任何变化 但是框架究竟是怎么产生功能的呢? 怎么样在程序运行的时候,能够找到特性,反射! 可以从类型 属性 方法 都可以获取特性实例,要求先IsDefined检测 再获取(实例化) 程序运行时可以找到特性---那就可以发挥特性的作用--提供额外的信息--提供额外的行为 需要一个第三方InvokeCenter,在这里去主动检测并且使用特性,才能提供功能 特性本身是没有用的, 特性是在编译时确定的,构造函数/属性/字段,都不能用变量, 所以,mvc5-filter是不能注入的,所以在core里面才提供了注入filter的方式 1 特性封装提供额外信息Remark封装 2 特性封装提供额外行为Validate验证