C#知识梳理——特性
特性是什么?——一个类,继承自Attribute 形象地表示,它就是一个称号的限定词,或者说“头衔”,比如 伟大的扫帚持有者、沈阳大街凌晨的王、灯光下的橙色衣着者保洁员老王 这就是加了一些限定词的保洁员老王,理论上完整地描述老王,应当把他的所有头衔都加上,才是完整地描述。当然了,每个头衔也都意味着老王有不同的“功能”。

特性的使用场景
主要是用于数据验证,可以写在程序集、构造函数、委托、枚举、事件、属性、类、字段、方法接口、返回值、参数上,都可以
也意味着几乎所有的框架都用到了


特性分类
1、 C#系统自带 功能非常强大,我们自定义的一般做不到这么强大的功能,可以去手册查看使用说明
2、 自定义—它就像一个正常的类
特性的创建:
首先必须要认定的一点,它是一个类,并且继承自Attribute
特性的调用:
在调用的时候,不是这个“头衔”往那一扔,就知道是给谁了。所以在定义特性的时候,要赋予特性一个功能,那就是要让它知道自己在什么地方起作用。不然乱加头衔,都不知道加给谁了,不知道是加给一个类还是一个方法还是一个构造函数。
需要一个方法来使得标记的特性在某个地方生效。

一个简单的逻辑—创建出来->贴上特性->用方法找出它->调用它
用法1:
知识点:特性中也可以标注特性
枚举中特性的应用,可以使得代码更加的灵活
记住,用法都离不开特性的三步:
第一步—定义特性
第二步—标记
第三步—调用
体现出来就是三个类 一个是特性类 一个是正常类(正常类、枚举类等)一个是Invoke的类
这样的枚举,在使用的时候比较麻烦,为什么呢,因为需要通过判断来将之于正常、冻结、删除这些中文去对应。并且在后期的修改中,如果想统一更改代表的含义,需要在代码的各个地方进行更改。
定义如下特性:
所以,利用此特性,可以将枚举修改为:
至此,我们完成了特性的建立、以及标记。那么,接下来要写一个方法来调用特性。
至此,我们可以通过在主函数中用GetRemark来实现调用特性
明显的,我们给出了一个删除,可以看运行结果

用法2:
三步骤继续来
这是一个简单的特性
这是一个简单在类中贴标记
这是一个泛型的调用方法,用来调用特性。在每次找到对应的特性后,进行特性的调用。
在主函数应当这样使用,那么,结果应当如下:

那么现在可以提出一个问题,为什么系统给的特性不需要这么麻烦去调用呢?
其实是这样的,在框架中,这些复杂的内容给出了解决的方法,所以系统自带特性用起来很方便,只需要贴标签即可。
我们自己写的特性也可以在使用的时候稍微方便一点———改进一下,改成扩展方法。即静态类里的静态方法。
将invoke类改动


用法3——特性验证:
我个人觉得,用通俗一点的话来说就是,有了这个特性以后,你就必须怎么样,才能怎么样。
就像是碧桂园门口的保安,只让业主和给了好处的人进小区,其他闲杂人等不得进入。
这也是特性的很重要的用法,数据验证。
前文都是在很类、字段里找一个特性 而可不可以找多个特性呢?当然可以。
三步走
抽象类 一个特性
继承自上边的抽象类 二号特性
继承自上边的抽象类 三号特性
继承自上边的抽象类 四号特性
一个普通类
调用的类
使用

