读你必须知道的.NET(三)
继续学习你必须知道的.NET:http://www.cnblogs.com/anytao/archive/2007/04/19/must_net_03.html
特性:定制特性attribute,本质上是一个直接或者间接继承自System.Attribute的类,为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息,可应用的目标元素为:程序集、模块、类型、属性、事件、字段、方法、参数、返回值,主要用在序列化、编译器指令、设计模式方面,编译时初始化。C#允许以指定的前缀来表示特性所应用的目标元素,建议这样来处理,因为显式处理可以消除可能带来的二义性。
using System;
namespace Anytao.net
{
[assembly: MyAttribute(1)] //应用于程序集
[moduel: MyAttribute(2)] //应用于模块
pubic class Attribute_how2do
{
//TODO
}
}
定制特性也可以用在其他定制特性上因为特性本身也是一个类,遵守类的公有规则,不影响应用元素的任何功能,只是约定了该元素具有的特质。所有非抽象特性必须具有public访问限制。
属性:面向对象编程的基本概念,提供了对私有字段的访问封装(get与set访问器方法实现对可读可写属性的操作,提供安全性和灵活性)。
定义特性:
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Method,
Inherited = true)]
public class TestAttribute : System.Attribute
{
public TestAttribute(string message)
{
Console.WriteLine(message);
}
public void RunTest()
{
Console.WriteLine("TestAttribute here.");
}
}
应用于目标元素:
[Test("Error Here.")]
public void CannotRun()
{
//TODO
}
使用反射机制获取元素附加信息:
public static void Main()
{
Tester t = new Tester();
t.CannotRun();
Type tp = typeof(Tester);
MethodInfo mInfo = tp.GetMethod("CannotRun");
TestAttribute myAtt = (TestAttribute)Attribute.GetCustomAttribute(mInfo, typeof(TestAttribute));
myAtt.RunTest();
}
Attribute的本质在于以编程的方式为生成的Assembly添加Metadata,通过Reflection分析这些Metadata,来作出相应的操作。
作者:Ribbon 出处: http://www.cnblogs.com/Ribbon/
本文版权归作者和博客园共有,欢迎转载。未经作者同意下,必须在文章页面明显标出原文链接及作者,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!

浙公网安备 33010602011771号