博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#之Attribute(特性)
阅读量:7122 次
发布时间:2019-06-28

本文共 844 字,大约阅读时间需要 2 分钟。

本文主要复习下基础知识:

1.C#系统自带的特性:

  建立一个控制台项目取名为AttributeTest:

   

我们添加了一个系统自带的Attribute叫Condition,这个特性表示在程序的DEBUG状态下才可以运行方法,我们在DEBUG下运行可以正常输出:

然后我们改为Release模式不会看到结果:

我们也可以写一个预处理指令在Release模式下也可以实现DEBUG的效果:

下面再来试下第二个系统自带的特性Obsolete,用来标识方法还能不能用的特性,如果当一个方法加了Obsolete特性且指定了错误信息的显示那么在调试生成的时候就不能通过编译:

2.自定义Attribute

3.通过反射来获取到2自定义的特性里面的信息:

 

 

最后总结一下特性的调用原理其实就是对特性类的一个实例化:

Attribute 实例化的语法是相当怪异的,主要体现在以下三点:   

1. 不使用new 操作符来产生实例,而是使用在方括号里调用构造函数来产生实例。   

2. 方括号必需紧挨着放置在被附着目标的前面。   

3. 因为方括号里空间有限,不能像使用new 那样先构造对象,然后再给对象的属性(Property)赋值。   因此,对Attribute 实例的属性赋值也在构造函数的圆括号里。   

并且,Attribute 实例化时尤其要注意的是:   

1. 构造函数的参数是一定要写。有几个就得写几个,因为你不写的话实例就无法构造出来。   

2. 构造函数参数的顺序不能错。调用任何函数都不能改变参数的顺序,除非它有相应的重载(Overload)。因为这个顺序是固定的,有些书里称其为“定位参数”(意即“个数和位置固定的参数”)。   

3. 对Attribute 实例的属性的赋值可有可无。反正它会有一个默认值,并且属性赋值的顺序不受限制。有些书里称属性赋值的参数为“具名参数”。

转载于:https://www.cnblogs.com/yk123/p/4782593.html

你可能感兴趣的文章
Python yield与实现
查看>>
mongodb一些使用技巧或注意事项记录
查看>>
C# 浅拷贝与深拷贝区别 解惑篇
查看>>
nested loop,merge join,hash join与子查询优化
查看>>
注册过程太痛苦,昵称起了一箩筐还是没有可用的,前端校验和后台查询不一致用户体验太差...
查看>>
Munin进阶使用
查看>>
[Nhibernate]体系结构
查看>>
【转载】对 Zookeeper 的一些分析
查看>>
IPC 和 RPC (呵呵,我感觉我应该要钻研到这个深度啦)
查看>>
设计可以多选的按钮ChooseManyButton
查看>>
NSURLErrorDomain Code=-999
查看>>
SQL模板资源管理器,你用了吗?
查看>>
ORA-00600: internal error code, arguments: [17281], [1001], [0x1FF863EE8], [], [], [], [], []
查看>>
Integer取值范围和NumberFormatException的解决
查看>>
网站技术笔记-演化
查看>>
【转】IE10 CSS hack
查看>>
堆排序(1)
查看>>
Node.js之HTTP请求与响应
查看>>
DOM何时Ready
查看>>
常用正则表达式
查看>>