特性简介
特性
特性就是将一段特性代码和我们的代码组合,为我们的某些代码添加一些信息
自带的三个特性
[Obsolete]特性,主要用于标记过时代码或已被替换的旧代码
该特性有两个参数:
message:主要用于添加描述信息
error:是一个bool值,false为生成一个警告,true为报错
[Obsolete("过时方法")] private static void OutModed() { Console.WriteLine("我是过时的方法"); }
调用该方法时:
[Conditional]特性,主要用于忽略某个方法或属性
参数为条件或方法的名称,此参数需要区分大小写
[Conditional("DEBUG")] private static void Debug() { Console.WriteLine("我是debug"); } [Conditional("Trace")] public static void Trace() { Console.WriteLine("我是TRACE"); }
调用这两个方法:
[AttributeUsage]描述了如何使用一个自定义特性类
- 参数AttributeTargets 指定可以应用特性的类别
- 参数allowMultiple 指示该特性是单用还是多用 默认false
- 参数inherited是否可以继续 默认true
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple = false)] //可用|规定多种可应用类别 class TestAttribute : Attribute { public TestAttribute(int howManyTimes)=> this.HowManyTimes = howManyTimes; public string WhatDoseItDo { get; set; } public int HowManyTimes { get;private set;} }
上述特性只声明了类和方法,所以如下用在结构中会报错
[Test(12)] //会报错,因为只声明了Class,Method struct Test1 { //结构 }
上述特性AllowMutiple为false,所以不能重复使用
[Test(12)] [Test(13)] class Test1 { }
可直接在调用特性时为特性成员赋值
[Test(1000,WhatDoseItDo ="voodoo")] public class TestClass { }