zoukankan      html  css  js  c++  java
  • 20180426Advanced11Course3Attribute(特性attribute-语言进阶)【二】

    一、在工作中见过的特性:

    1、Obsolete:api升级时,有些方法用其它方法代替

    [Obsolete("已过时,请使用XX来代替",true)]:使用在类、字段或方法上。

    2、Serializable:可以序列化与反序列化

    3、MVC中的filter:权限认证、异常处理

    4、ORM中的table、key、display

    5、DisplayName

    6、DllImport:调用非托管dll

    7、StringLength

    8、Description

    9、在MVC中,实体类的属性有Display

    特性与注释的区别:特性与注释差不多,唯一的差别就是特性可以影响编译器/程序的运行。

     二、特性:

    1、它是一个类,直接/间接的继承自Attribute。一般以Attribute结尾,声明时可以省略掉Attribute。如StudentAttribute,在使用时用Student即可。

    2、中括号声明,会给我们一种每个特性都可以带来对应的功能的错觉,实际上是,编译后会在元素内部产生IL,但是我们是没办法直接使用的(直接定义一个特性类使用它,没有任何作用),而且在metadata里面有记录。在IL中,如果在类上使用特性,它会变成类的一个构造。

    使用:    //可以直接指定属性、字段,方法不行。相当于实例化一个类

        [Custom(123, Description = "1234", Remark = "2345")]

    3、AttributeUsage

     

    AttributeTargets:可以修饰哪些元素,默认为All

    AllowMultiple:一个类可以多次修饰,默认为false。如,一个类上有两个相同名字的特性

    Inherited:可不可以继承。默认为true

    4、可以给类、属性、字段、参数、返回值加特性

    5、特性本身没用,因为在类上加入特性后,只是单纯的声明,需要我们主动使用才有用。程序运行过程中,我们可以通过反射找到特性。 特性与反射息息相关,如果特性不使用反射,是不能发挥它的作用的。

    过滤器是基于特性实现的。

     

  • 相关阅读:
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    125. Valid Palindrome
    124. Binary Tree Maximum Path Sum
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    120. Triangle
    119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/lanyuejiagou/p/13918268.html
Copyright © 2011-2022 走看看