zoukankan      html  css  js  c++  java
  • C#学习笔记Attribute

    直接或间接继承自System.Attribute的类是Attribute,按照约定,属性的名字应该带一个Attribute的后缀,当然不带也不会引起编译时的错误,只不过需要注意的是以下内容
    using System;

    [AttributeUsage(AttributeTargets.All)]

    public class XAttribute: Attribute

    {}

    [X]                       
    // Refers to XAttribute

    class Class1 {}

    [XAttribute]              
    // Refers to XAttribute

    class Class2 {}

    [@X]                      
    // Error: no attribute named "X"

    class Class3 {}


    看过上面的代码应该知道了,@可以去掉二义性.还有一点,[XAttribute]是没有二义性的,即使还有个属性叫做[XAttributeAttribute].
    另一个内容是关于Attribute的参数的,它可以有两类参数位置参数(Positional Parameters)和命名参数(Named Parameters).见如下代码
    using System;

    [AttributeUsage(AttributeTargets.Class)]

    public class HelpAttribute: Attribute

    {

        
    public HelpAttribute(string url) {    // Positional parameter

            

        }


        
    public string Topic {                 // Named parameter

            
    get {}

            
    set {}

        }


        
    public string Url {

            
    get {}

        }


    }


    每一个共有的实例(不是static)构造器都可以定义一系列位置参数,而非静态的可读写字段和属性可以定义命名参数.
    三个保留的属性:
    1.System.AttributeUsageAttribute 用来定义属性使用的方式.被该属性修饰的类必须是直接或者间接继承自System.Attribute,否则将会有编译时错误.有一个枚举类型的位置参数AttributeTargets,表示定义的属性可以应用到什么身上.两个命名参数AllowMultiple (代表该属性是否可以多次用在统一对象上)和Inherited (表示当该属性用到基类的时候,该属性是否会自动添加到派生类上).
    2.System.Diagnostics.ConditionalAttribute 用来标志一个条件方法,通过测试编译条件来决创建一个条件.是否调用被标记属性ConditionalAttribute 的方法,取决于在调用的地方(不是被调用的地方)是否有编译条件.这个属性有一个位置参数string conditionString表示条件.条件方法有如下限制:
    a)条件属性只能定义在类或者结构的方法上,如果定义在接口的方法上就会有编译错误.
    b)条件属性只能定义在返回类型为void的方法上.
    C)条件属性不能用在用override修饰的方法上.条件属性可以应用于有virtual的方法上,并且隐含地应用于重载该方法的方法上,但不能显式地定义某个用override修饰的方法.
    d)条件属性也不能应用于实现接口的方法的方法上.否则将引发编译时错误(条件成员**方法不能实现接口**方法).
    3.System.Obsolete 用来表征一个类型或者一个类型的成员不再使用了.该属性有三个实例构造函数,于是有三个位置参数定位序列.其中最多的有两个参数string message(当客户端代码调用这个类型或者类型的成员时的提示信息, bool error(默认为false当代码被注释时为警告,如果为ture则显示为编译错误)
  • 相关阅读:
    WPF做的小型音乐播放器升级版
    WPF做的小型下载工具和一点点吐槽
    js小技巧摘录1
    关于浏览器缓存设置
    js高阶函数应用—函数防抖和节流
    ES6中let和闭包
    js高阶函数应用—函数柯里化和反柯里化(二)
    js继承的实现(es5)
    js高阶函数应用—函数柯里化和反柯里化
    前端回答从输入URL到页面展示都经历了些什么
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/284632.html
Copyright © 2011-2022 走看看