C#基础:特性

C#特性是一种代码标记信息,这中信息可以从外部读取。[attribute].

示例代码如下:

  1.     //创建特性  AllowMultiple允许多次使用,AttributeUsage应用到什么类型的目标  AttributeTargets构造函数参数值
  2.     [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple =false)]
  3.     public class DoesInterestingThingsAttribute : Attribute {//通过继承Attribute来创建自定义特性
  4.         public DoesInterestingThingsAttribute(int howManyTimes) {
  5.             HowManyTimes = howManyTimes;
  6.         }
  7.         public int HowManyTimes {
  8.             get;private set;
  9.         }
  10.         public string WhateDoesItDo { get; set; }
  11.     }
  12.     //自定义特性                                                                                                //系统特性
  13.     [DoesInterestingThingsAttribute(1000, WhateDoesItDo = "voodoo")][DebuggerStepThrough]//类的特性
  14.     public class DecoratedClass {
  15.         [DebuggerStepThrough]//方法特性
  16.         public void DullMethod() { }
  17.     }
  18.  
  19. //特性的读取,通过反射(reflection)技术。
  20. public static void Main(string[] args){
  21.   //特性读取  类的特性读取
  22.             Type classType = typeof(DecoratedClass);
  23.             object[] customAttributes = classType.GetCustomAttributes(true);
  24.             foreach (object cuestomAttritute in customAttributes)
  25.             {
  26.                 Console.WriteLine($"找到特性:={cuestomAttritute}");
  27.                 if (cuestomAttritute is DoesInterestingThingsAttribute aa)
  28.                 {
  29.                     Console.WriteLine($"This class does {aa.WhateDoesItDo}***" + $" {aa.HowManyTimes}!");
  30.                 }
  31.                 else
  32.                 {
  33.                     Console.WriteLine("不是自定义特性");
  34.                 }
  35.             }
  36. //方法的特性读取
  37.            MethodInfo method = classType.GetMethod(nameof(DecoratedClass.DullMethod));
  38.             object[] DullMethodAttributes = method.GetCustomAttributes(true);
  39.             foreach (object item in DullMethodAttributes)
  40.             {
  41.                 if (item is DebuggerStepThroughAttribute)
  42.                 {
  43.                     Console.WriteLine("找到方法特性:={0}", item.ToString());
  44.                 }
  45.             }
  46. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值