星空网 > 软件开发 > ASP.net

C#特性的简单介绍

 特性应该我们大多接触过,比喻经常使用的[Obsolete],[Serializable]等下面我就主要介绍一个特性的一些用法

摘自MSDN定义:用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。 

意思就是把我们自定义的特性或者微软自带的特性和我们的代码进行组合,其实就是为我们某些代码附加一些信息

1:先看.Net带的三种特性

1.1:[Obsolete]这个预定义特性标记了不应被使用的程序实体

  • 参数 message,是一个字符串,描述项目过时原因以及特带的项目。
  • 参数 error,是一个布尔值。如果该值为 true,编译器应把该项目的使用当作一个错误。默认值是 false(编译器生成一个警告)。
         [Obsolete("过时方法")]    private static void OutModed()    {      Console.WriteLine("我是过时的方法");    }

然后引用的时候就出现C#特性的简单介绍

如果加上false我们发现在引用的使用就没法编译过去大家可以自己试验下

1.2:[Conditional]这个预定义特性指示编译器应忽略方法调用或属性,除非已定义指定的条件编译符号

  • 参数 conditionString,获取与 ConditionalAttribute 属性相关的条件编译符号。

 

private static void Main(string[] args)    {      Debug();      Trace();          }    [Conditional("DEBUG")]    private static void Debug() {      Console.WriteLine("我是debug");    }    [Conditional("TRACE")]    public static void Trace()    {      Console.WriteLine("我是TRACE");    }

当调试成trace模式的时候只能结果:

C#特性的简单介绍

1.3:[AttributeUsage]描述了如何使用一个自定义特性类。并加上限制

  • 参数AttributeTargets 指定可以对它们应用特性的应用程序元素
  • 参数allowMultiple 指示该特性是单用还是多用  默认false
  • 参数inherited是否可以继续 默认true

创建一个自定义特性

[AttributeUsage(AttributeTargets.Method)]  public class CustomAttribute:Attribute  {    public string Name { get; set; }    public CustomAttribute(string name)    {      Name = name;    }  }

上面的限制是只能用于方法

   [Custom()]//报错  internal class Program  {    private static void Main(string[] args)    {        }

allowMultiple = false。它规定了特性不能被重复放置多次所以下面代码会报错

    [Custom("1")] //报错    [Custom("2")]    public void Method()    {    }

 2:自定义特性

先定义一个特性类

  [AttributeUsage(AttributeTargets.All,AllowMultiple = true,Inherited = false)]  public class CustomAttribute:Attribute  {    public string Name { get; set; }    public int Age { get; set; }    public CustomAttribute(string name,int age)    {      Name = name;      Age = age;    }  }

然后定义一个基类

[Custom("张三", 3)]  public class Base  {        public static void Method()    {      Console.WriteLine("我具有一个特性");    }      }

  public static void GetAttributeInfo(Type t) {      var myattribute = (CustomAttribute)Attribute.GetCustomAttribute(t, typeof(CustomAttribute));      if (myattribute!=null)      {        Console.WriteLine("姓名:{0}\n年龄:{1}", myattribute.Name, myattribute.Age);      }      }

调用

GetAttributeInfo(typeof(Base));

C#特性的简单介绍

 

  public class Base  {      [Custom("张三", 3)]//方法上      public static void Method()    {      Console.WriteLine("我具有一个特性");    }      }

就改变t的写法:t.GetMethod("Method")这样来获取特性运行效果一样

 




原标题:C#特性的简单介绍

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊8月15日将征收长期仓储费:https://www.goluckyvip.com/news/3316.html
警告!Shopee将对不活跃店铺进行清查,不排除永久关店:https://www.goluckyvip.com/news/3317.html
东南亚shopee平台男性消费崛起,你有这方面的准备吗?:https://www.goluckyvip.com/news/3318.html
LAZADA新商家开店入驻常见异议解析:https://www.goluckyvip.com/news/3319.html
亚马逊仓储费费率0.69美元调整至2.4美元_如何减少仓储费:https://www.goluckyvip.com/news/332.html
跨境电商亚马逊和东南亚shopee平台对比,谁更加的适合我们新手卖家进行入驻:https://www.goluckyvip.com/news/3320.html
探讨内地人开设香港账户的可行性 :https://www.kjdsnews.com/a/1836442.html
在古巴做游轮 古巴旅游项目:https://www.vstour.cn/a/363194.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流