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

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

     

  • 相关阅读:
    css小随笔
    正则表达式的疑问
    笔记本各型号CPU性能比较
    调整Ajax的ValidatorCalloutExtender绑定后的提示字体
    GridView显示空表头
    VB.net检测输入内容
    asp.net中System.DateTime.Now.ToString()的一些用法
    收藏的手机论坛
    常用或者将要用的技巧或代码(网摘)
    使用Ajax的MaskedEditExtender来限制输入内容
  • 原文地址:https://www.cnblogs.com/lanyuejiagou/p/13918268.html
Copyright © 2011-2022 走看看