c#特性详解【含常用过滤器实例】

时间:2022-01-04 03:32:44

标签:

基础拾遗

基础拾遗------特性详解

基础拾遗------webservice详解

基础拾遗------redis详解

基础拾遗------反射详解

基础拾遗------委托详解

基础拾遗------接口详解

基础拾遗------泛型详解

前言

  本来7月份想着是用一个月把基础拾遗写完的,结果断断续续写了4个月了,才写了这几篇,这两天又规划着多写几篇,希望能坚持吧。两天一次和同事聊天竟然好多人都不知道,他们每天却都在用。

1.特性概念

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

特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。比如我们在执行方法之前,要先判断一下用户有没有执行这个方法的权限,方法出现异常的时候怎么去处理。

1.1.枚举

  为啥要在这聊枚举,是不是sa,我把代码贴出来。

enum Fruit { [Description("苹果")] Apple, [Description("橙子")] Orange, [Description("西瓜")] Watermelon }

Ok,你只需要F12 Description 会看到

public DescriptionAttribute(string description);

  这个家伙,没错DescriptionAttribute(string description),它就是一个特性。现在知道了吧你其实也在用到特性,只是你知不到而已。这个开篇和以往不一样,并且废话有点多。尴尬了,现在回来。

2.预定义特性

  注:1.特性大致分为两种特性预定义特性和定制特性。

    2.预定义特性.Net 框架提供了三种预定义特性:

2.1.AttributeUsage(AttributeUsageAttribute 类):

  2.1.1.作用:

  描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。

  2.1.2.使用:

   [AttributeUsage(validon, AllowMultiple = false, Inherited = true)]

  //限定特性类的应用范围 (这里规定ClassMsg这个特性类只能用于类和字段) [AttributeUsage(AttributeTargets.Class | AttributeTargets.Field, AllowMultiple = true, Inherited = false)] //定制MsgAttribute特性类,继承于Attribute public class ClassMsgAttribute : Attribute { //定义_msg字段和Msg属性//Msg属性用于读写msg字段 string _msg; public string Msg { get { return _msg; } set { _msg = value; } } public ClassMsgAttribute() { } //重载构造函数接收一个参数,赋值给_msg字段 public ClassMsgAttribute(string s) { _msg = s; } }

  //调用 //在Person类上标记ClassMsg特性 [ClassMsg(Msg = "这是关于人的姓名信息的类")] class Person { //在_name字段上应用ClassMsg特性 [ClassMsg("这是存储姓名的字段")] string _name; //以下特性无法应用,因为MsgAttribute定义的特性只能用于类和字段 //[ClassMsg("这是读写姓名字段的属性")] public string Name { get { return _name; } set { _name = value; } } } }

以上是AttributeUsage使用时的一个小栗子。

2.1.3.AttributeUsage 参数说明
  validon:被放置的语言元素,它是枚举器 AttributeTargets 的值的组合。默认值是 AttributeTargets.All。

  AllowMultiple:该值指示能否为一个程序元素指定多个指示属性实例。如果允许指定多个实例,则为 true;否则为 false。默认为 false。

  Inherited:该值指示指示的属性能否由派生类和重写成员继承。如果该属性可由派生类和重写成员继承,则为 true,否则为 false。默认为 true。 

2.2.Obsolete(ObsoleteAttribute 类):

2.2.1.作用:

  这个单词是废弃的意思,其实这个特性也是用来 就是舍弃这个方法,生成一个错误或警告。

2.2.2.用法:

  [Obsolete( message, iserror)]