欢迎光临散文网 会员登陆 & 注册

C#知识梳理——特性

2023-08-17 08:30 作者:羞涩男孩小小明  | 我要投稿

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

所有的特性,追根溯源,都是继承自Attribute 自定义的也不例外

特性的使用场景

主要是用于数据验证,可以写在程序集、构造函数、委托、枚举、事件、属性、类、字段、方法接口、返回值、参数上,都可以

也意味着几乎所有的框架都用到了

特性使用场景1
特性使用场景2

特性分类

1、 C#系统自带 功能非常强大,我们自定义的一般做不到这么强大的功能,可以去手册查看使用说明

2、 自定义—它就像一个正常的类

特性的创建:

首先必须要认定的一点,它是一个类,并且继承自Attribute


特性的调用:

在调用的时候,不是这个“头衔”往那一扔,就知道是给谁了。所以在定义特性的时候,要赋予特性一个功能,那就是要让它知道自己在什么地方起作用。不然乱加头衔,都不知道加给谁了,不知道是加给一个类还是一个方法还是一个构造函数。

 

需要一个方法来使得标记的特性在某个地方生效。

特性的作用过程

一个简单的逻辑—创建出来->贴上特性->用方法找出它->调用它

用法1:

知识点:特性中也可以标注特性

枚举中特性的应用,可以使得代码更加的灵活

记住,用法都离不开特性的三步:

第一步—定义特性

第二步—标记

第三步—调用

体现出来就是三个类 一个是特性类 一个是正常类(正常类、枚举类等)一个是Invoke的类

这样的枚举,在使用的时候比较麻烦,为什么呢,因为需要通过判断来将之于正常、冻结、删除这些中文去对应。并且在后期的修改中,如果想统一更改代表的含义,需要在代码的各个地方进行更改。

定义如下特性:

所以,利用此特性,可以将枚举修改为:

至此,我们完成了特性的建立、以及标记。那么,接下来要写一个方法来调用特性。

至此,我们可以通过在主函数中用GetRemark来实现调用特性

明显的,我们给出了一个删除,可以看运行结果

用法1运行结果

用法2:

三步骤继续来

这是一个简单的特性

这是一个简单在类中贴标记

这是一个泛型的调用方法,用来调用特性。在每次找到对应的特性后,进行特性的调用。

在主函数应当这样使用,那么,结果应当如下:

用法2的结果

那么现在可以提出一个问题,为什么系统给的特性不需要这么麻烦去调用呢?

其实是这样的,在框架中,这些复杂的内容给出了解决的方法,所以系统自带特性用起来很方便,只需要贴标签即可。

我们自己写的特性也可以在使用的时候稍微方便一点———改进一下,改成扩展方法。即静态类里的静态方法。

将invoke类改动

改进 静态方法
改进后的使用方法

用法3——特性验证:

我个人觉得,用通俗一点的话来说就是,有了这个特性以后,你就必须怎么样,才能怎么样。

就像是碧桂园门口的保安,只让业主和给了好处的人进小区,其他闲杂人等不得进入。

这也是特性的很重要的用法,数据验证。

前文都是在很类、字段里找一个特性 而可不可以找多个特性呢?当然可以。

 

三步走

抽象类 一个特性

继承自上边的抽象类 二号特性

继承自上边的抽象类 三号特性

继承自上边的抽象类 四号特性

一个普通类

调用的类

使用



总结:记住三步原则,即可掌握特性的基本使用!


C#知识梳理——特性的评论 (共 条)

分享到微博请遵守国家法律