C#特性(Attribute)

.Net框架提供了三种预定义特性:attributeUsageConditional、obsolete

预定义特性AttributeUsage:预定义特性attributeusage描述了如何使用一个自定义特性类,它规定了特性可应用到的项目的类型。

[AttributeUsage(
validon,
AllowMultiple=allowmultiple,
Inherited=inherited)}

Conditional

这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符它会引起方法调用的条件编译,取决于指定的值,比如Debug或Trace.例如,当调试代码时显示变量的值。

规定该特性的语法如下:

[Conditional(conditionalSymbol
)]例如:
[Conditional("DEBUG")]

Obsolete

这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。

[Obsolete(message
)][Obsolete(message,iserror
)]

参数message,是一个字符串,描述项目为什么过时的原因以及该替代是用什么。

参数iserror,是一个布尔值。如果该值为true,编译器应把该项目的使用当做一个错误,默认值的false(编译器生成一个警告)。

创建自定义特性(Attribute)

.Net框架允许创建自定义特性,用于存储声明性信息,且可在运行时被检索,该信息根据设计标准和程序需要,可与任何目标元素相关。

创建并使用自定义特性包含四个步骤

声明自定义特性。构建自定义特性、在目标程序元素上应用自定义特性、通过反射访问自定义特性。

声明自定义特性:

一个新的自定义特性应派生自System.Attribute类。例如:

// 一个自定义特性 BugFix 被赋给类及其成员
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]public class DeBugInfo : System.Attribute

构建自定义

// 一个自定义特性 BugFix 被赋给类及其成员
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]public class DeBugInfo : System.Attribute
{private int bugNo;private string developer;private string lastReview;public string message;public DeBugInfo(int bg, string dev, string d){this.bugNo = bg;this.developer = dev;this.lastReview = d;}public int BugNo{get{return bugNo;}}public string Developer{get{return developer;}}public string LastReview{get{return lastReview;}}public string Message{get{return message;}set{message = value;}}
}

C#中利用Conditional定义条件方法

利用conditional属性,程序员可以定义条件方法。conditional属性通过测试条件编译符号来确定适用的条件。当运行到一个条件方法调用时,是否执行该调用,要根据出现该调用时是否已定义了此符号来确定。如果定义了此符号,则执行该调用;否则省略该调用(包括对调用的参数的计算)。使用Conditional是封闭#if和#endif内部方法的替代方法,它更整洁、更别致、减少了出错的机会。

条件方法要受到以下限制:

条件方法必须是类声明或结构声明中的方法。如果在接口声明中的方法指定Conditional属性,将出现编译时错误。

条件方法必须具有返回类型。

不能用override修饰符标记条件方法。但是可以用virtual修饰符标记条件方法。此类方法的重写方法隐含为有条件的方法,而且不能用Conditional属性显式标记。

条件方法不能是接口方法的实现。否则将发生编译时错误。

如果条件方法用在委托创建表达式中,也会发生编译时错误。

这里需要注意的是:如果创建一个没有定义任何条件的方法,那么默认只要调用就总是会执行此方法,如果你想通过条件判断来执行,那么该方法上必须至少包含一个conditional特性所包含的条件,他才会响应你定义的条件。

菜鸟教程C#高级教程相关推荐

  1. 高级计算机网络教程,计算机网络高级教程

    本书介绍人工智能的理论.方法和技术及其应用,除了讨论那些仍然有用的和有效的基本原理和方法之外,着重阐述一些新的和正在研究的人工智能方法与技术,特别是近期发展起来的方法和技术.此外,用比较多的篇幅论述人 ...

  2. java高级教程_Java高级教程02

    1.Java线程 1.1. 多线程和多进程 多进程:操作系统能够同时进行多个任务: 每个app(word,播放器,浏览器)可以同时运行 多线程:同一应用程序中哟多个顺序流同时执行 线程是进程中的一部分 ...

  3. mysql sql高级教程_SQL高级教程

    一.top子句 top子句用于规定要返回的记录的数目 并非所有数据库系统都支持top子句 # sqlserverSELECT TOP number|percent column_name(s) FRO ...

  4. matlab高级教程,【高级教程】利用高级计算软件MATLAB抠图教程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 A=imread('lin13.bmp'); %输入淋淋图像名字 imshow(A); hold on; Threshold = 1; UniBack=[ ...

  5. python继承编程教程_Python高级教程-多重继承

    多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类可以扩展父类的功能. Animal类的层次设计,假设要实现以下4中动物: Dog - 狗狗: Bat - 蝙蝠: Parrot - 鹦鹉 ...

  6. MongoDB 教程三: 高级查询

    视频:MongoDB 教程三: 高级查询 MongoDB支持的查询语言非常强大,语法规则类似于面向对象的查询语言,可以实现类似关系数据库单表查询的绝大部分功能,并且由于 MongoDB可以支持复杂的数 ...

  7. CMD命令行高级教程精选合编合集 转

    CMD命令行高级教程精选合编合集 PKjason 发布于 2013/04/14 18:24 CMD命令行高级教程精选合编,需要的朋友可以参考下. 目录 第一章 批处理基础 第一节 常用批处理内部命令简 ...

  8. Vbs与批处理高级教程

    Vbs 与批处理高级教程 Vbs 脚本编程简明教程之一 -为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件 ...

  9. CMD命令行高级教程

    第一章 批处理基础    第一节 常用批处理内部命令简介      1.REM 和 ::      2.ECHO 和 @      3.PAUSE      4.ERRORLEVEL      5.T ...

最新文章

  1. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
  2. MyBatis——Java API
  3. 关于云计算 你所知道的可能不是真的
  4. 叉乘(三)——线段与线段相交吗?
  5. 贡献一个连jquery都觉的大的时候可以用的 js库
  6. mac 强制退出程序_强行退出Mac上应用程序的6 种方法
  7. 互联网晚报 | 3月22日 星期二 |​ ​工作人员标注mu5735残骸并展开调查;万门大学疑似解散VIP群跑路...
  8. 2018上海大学生网络安全赛 misc 92 wp
  9. 基于阿里云的移动客户端服务器架构图
  10. CentOS 7 常用命令
  11. 自定义 线性布局_智能组件探索:这个工具栏会自动布局~
  12. C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网
  13. 《单片机原理与接口技术》小结
  14. vb.net 教程 3-10 窗体编程 datagridview控件 7 修改单元格
  15. 【阅读笔记】Implementation of tactical maneuvers with maneuver libraries
  16. Tidabie Tidal Music 潮汐音乐下载转换器
  17. 冶金、水泥、化工行业自动化通信产品介绍
  18. Emacs+Muse 使用
  19. xp系统开机密码忘了如何进入系统重新设置密码--win10专业版
  20. iOS App签名的原理

热门文章

  1. 指纹识别在智能手机上的应用前景分析
  2. 为什么计算机二级未来教育评分低,未来教育计算机Msoffice二级, PPT评分总是说文件不存在, 分数总是0分, 到底是为什么?...
  3. 大型圆弧怎么处理_这种大圆弧一次成型,回弹怎么计算?低公差
  4. 这样写的文案可以激起欲望
  5. 海岸TDM系统配置工具-流程
  6. 整合腾讯云地图的绘制和编辑几何图形
  7. 国产32层堆栈3D闪存2019年量产 2020年赶超国际
  8. PHP导出Excel,亲测有用
  9. Mac 安装Mactex教程
  10. 人工智能时代对人类就业有哪些影响,我们应该如何应对?