特性简述:
c#中的特性,是给编码中的代码添加一些数据,也可以理解为说明。例如:给类添加个等级信息,给方法添加个编码日期等等。它必须继承自System.Attribute类或其派生类。
有些特性类是具备触发条件的,例如ASP.NET MVC Framework中Action Filter中的AuthorizeAttribute,它就有自己的触发条件,可以酌情重写以下方法。
OnActionExecuting – 在controller action执行之前调用
OnActionExecuted – 在controller action执行之后调用
OnResultExecuting – 在controller action result执行之前调用
OnResultExecuted – 在controller action result执行之后调用
这东西,在代码被框架调用时,很有用,平时编程意义不大。
例:
编写一个特性TestA:
1 class TestA:Attribute 2 { 3 int power; 4 public int Power 5 { 6 get { return power; } 7 set { power = value; } 8 } 9 }
该特性仅仅设定一个整数,表示一段代码的权重(YY的)
编写两个类(其实内容一样),分别给出不同的权重:
1 [TestA(Power=100)] 2 class TestClass1 3 { 4 public string Name { get; set; } 5 public int Age { get; set; } 6 }
还有一个
[TestA(Power = 50)] class TestClass2 { public string Name { get; set; } public int Age { get; set; } }
在主方法中可以取出这两个类的权重:
1 static void Main(string[] args) 2 { 3 var myclass1 = new TestClass1(); 4 var myclass2 = new TestClass2(); 5 var as1 = myclass1.GetType().GetCustomAttributes(typeof(TestA), false); 6 var as2 = myclass2.GetType().GetCustomAttributes(typeof(TestA), false); 7 Console.WriteLine(((TestA)as1[0]).Power); 8 Console.WriteLine(((TestA)as2[0]).Power); 9 Console.ReadKey(); 10 }
运行结果:
总结:例子看似没什么意义,但如果调用类的是框架,就可以根据特性做很多事情。作为普通程序员,对其有一定了解,至少有助于日后阅读代码。