史上最通俗易懂的特性讲解【c#】

我发现很多人对特性只知道很有用,很高大上,但是就是不明白是怎么回事。

特性是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的

上面是伟大的官方和神秘网友给出的一通乱七八糟而高大上的解释,然后很多没接触过特性的人,看了之后就是一脸懵逼的来,一脸懵逼的走。

 非正义吐槽:给出这个定义的人,我就想说你要是不想人懂就干脆啥也别解释,要是想让人懂,你就写点人看的东西,ok?

言归正传:

特性是什么?

解释:特性就是一种特殊的属性,你翻译过来就知道了,属性:propertiy,特性:Attribute。但是

英文里Attribute也是属性的意思呀。所以为什么叫特性,大抵是因为属性的定义先出来的,为了和属性做一个概念的区分,所以Attribute取名特性。为什么后来叫“标签”了?这只能说是因为国内哪些曹🥚的“专家”按照自己畸形的理解给的命名。

你能看懂的解释:

举个例子:某星手机,首先作为一个手机,它有自己的固有属性,比如价格,颜色,尺寸,等等。

当你买手机的时候,于是开始用这些属性作为衡量标准去选择最适合自己的手机,于是你选了一款最贵的。可是有一个问题你忽略了,那就是这个型号的手机虽然贵,质量好,可是它有一个不可忽视的特殊性质:容易爆炸!

这个爆炸你给它定义成属性?那你琢磨一下会发现,你买的不是手机,而是一个炸弹。你整个bool属性?就是说你给手机的属性设置成true,就可以远程控制手机爆炸?这显然不科学。

所以爆炸将会以一种特性的方式存在,而这就是特性的意思。

给出我自己的定义:特性就是一种以主观为主导,类型的一种特有的不确定的属性

特性长什么样?

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, Inherited = true)]
    public class NotNullAndEmptyAttribute : Attribute
    {
        public NotNullAndEmptyAttribute()
        {
        }
    }。

呐,上面就是一个自定义特性的样子,没错固定的,就长这个样,你换个名字也长这个样,颜色标的是固定后缀,你不写也没事,但是规范起见,一定加上。

特性怎么用?有什么用?

特性必定与反射结合,可以说是孪生。因为它无法被直观的看到,所以你无法通过事物的表面去操作它,必须通过反射,找到本质,才能把它用起来

使用方法:随便定义一个特性类,注意,它也是一个类型,一个对象,所以完全可以拥有自己的属性,甚至是特性。

它的属性的作用,唯一的用法就是在特性类的构造函数里进行一些定制化的操作,比如:

定义特性类:BomAttribute,头上你可以加上一些更加基础的特性,比如:允许应用在对象上,字段上之类的,对应的就是AttributeUsage()这个特性。你也可以给他定义一个简单的属性,比如:IsEnabled,用于规定这个特性是否被启用,这样你在使用BomAttribute特性的时候,可以这样[Bom(IsEnabled=true)],这里的IsEnabled也可以不定义,就弄一个空的特性类也可以。

下面是一个简单的应用案例 

然后怎么起作用呢?

你可以用它做数据验证,或者在对象要存储到数据库之前,对目标对象进行预处理,对,关键点就是这里,预处理!拦截预处理!

在拿到这个对象之后,你需要应用反射+泛型,来将目标对象扒拉个干净,然后通过检测到的特性以及属性进行一些个人判断类的操作。具体使用方式

Type modelType = typeof(T);//扒拉对象所有本质

PropertyInfo[] propertyInfos = modelType.GetProperties();//获取所有属性

 object[] attrs = property.GetCustomAttributes(true);//获取属性字段头上的特性列表

BomAttribute bomValidate = (BomAttribute)attr;//获取自定义特性

///可以开始你的show time了。

结束

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值