c#进阶之特性(Attribute)
2021-01-16 21:15
标签:tom define http 合并 反射 场景 ram range 类型 相信只要是用过.net MVC的开发都用过特性,例如最基础的HttpMethodAttribute特性,用来给接口进行请求方式限定的,等等诸如此类的特性,数不胜数。 那么什么是特性? 特性就是一个类,直接或者间接继承自Attribute。 特性的使用方法有两种: attribute的使用规则,一般通过在特性类上使用AttributeUsage特性来进行设置 这个特性有三个属性: AllowMultiple:是否允许重复使用; Inherited:是否可以被继承; 构造函数有AttributeTargets类型的参数,主要用来设置特性的使用场景(类、接口、属性、字段……) 特性的使用场景: 1、用来做标记,通过判断类、属性……是否有这个特性,来进行一些业务逻辑上的判断,比如: 具体是通过System.Reflection程序集提供的反射功能来进行特性获取, 譬如判断一个类型是否具有某个特性,使用的是IsDefined方法, 获取一个类的所有特性,使用的是GetCustomAttributes方法,获取的是一个object[],可以通过as进行强转为需要判断的类型; 2、一些预设的特性: ObsoleteAttribute:可以通过添加这个特性,对类、属性、接口等进行代码过期设置; ConditionalAttribute:通过在方法上设置这个特性,可以屏蔽掉对该方法的所有调用(不过支持返回值是void的方法,毕竟只有这样才不会有在调用的时候有上下文); 经常看到错误日志里面有很详细的信息,具体到了某某文件多少行哪个方法出错等等,其实微软也提供了对应的特性,支持我们自己查看这些内容: 3、接口的模型绑定属性验证: 可以通过继承ValidationAttribute,并重写IsValid方法即可实现自定义的属性绑定校验。 c#进阶之特性(Attribute) 标签:tom define http 合并 反射 场景 ram range 类型 原文地址:https://www.cnblogs.com/yuchenghao/p/12210708.html [Range(0,10)]
[Test]
///分开单独使用
public int Hight { set; get; }
[Test, Range(0, 10)]
///合并使用,通过逗号分隔
public string Name { set; get; }
///
下一篇:C# 多选框控件
文章标题:c#进阶之特性(Attribute)
文章链接:http://soscw.com/index.php/essay/42893.html