.NET 特性Attribute[二]
.NET Framework中对Attribute的支持是一个全新的功能,这种支持来自它的Attribute类。在你的程序中适当地使用这个类,或者是灵活巧妙地利用这个类,将使你的程序获得某种在以往编程中很难做到的能力。我们来看一个例子:Ajax的流行,使得各种AJAX框架相继推出,.NET第三方提供的AJAX框架也很多,这里介绍一种Ajax.dll。
相信使用过Ajax.dll的朋友都惊奇它的“神奇”功能。Ajax的意思是使用JS从客户端调用服务器端的函数并返回服务器端处理的结果,而没有出现AJAX之前,每步操作都是提交到服务器然后返回。这里需要朋友们注意一点,即,无论你是使用AJAX。还是普通的方式,我们的服务器端的方法业务逻辑都是不变的。Ajax.dll的方便之处即可,我们还是一样按常规的方式去开发服务器端的代码,方法。如果您发现某一个方法,如用户注册,希望它能提供AJAX在客户端调用的功能。这时对于开发人员来讲,我是不希望再重新去写一个页面,在其PageLoad里面重复写上这段代码。供客户端调用。这样就太繁锁。
我们希望能以一种简单的方式实现。Ajax.dll就为我们提供了这样的方便。我们只需要在希望提供Ajax功能的函数前增加一个特性修饰,即可解决问题!非常简单方便!
这里我并不是推广和介绍Ajax.dll的使用。而是以此为例,引出特性的一个实际应用。特性Attribute的最重要的作用就是在不改变我们代码业务逻辑的前提下,让代码“增强”它的功能。
以上面开题为例子。我们来写一个简单的程序来模拟这个过程!
首先写一个自定义的Attribute类来描述需要提供Ajax方法的特性
[AttributeUsage(AttributeTargets.Method)]
public class AjaxAttribute:Attribute
{
//模拟二个参数仅为示例
private bool asy;//是否异步
private bool debugMode;//是否调试模式
public AjaxAttribute(bool asy)
{
Asy = asy;
}
public bool Asy
{
get{return asy;}
set{asy = value;}
}
public bool DebugMode
{
get{return debugMode;}
set{debugMode = value;}
}
}
应用类的代码如下:
{
static void Main(string[] args)
{
Type t = typeof(Class1);
foreach(MemberInfo m in t.GetMethods())
{
foreach(Attribute a in m.GetCustomAttributes(true))
{
if(a is AjaxAttribute)
{
//程序在运行时发现了需要提供AJAX功能的方法,然后将该方法进行相应的处理!过程省略。以下是模拟
Console.WriteLine("{0}类中的{1}方法提供异步属性为{2}的Ajax功能",t.Name,m.Name,((AjaxAttribute)a).Asy);
}
}
}
Console.ReadLine();
}
//需要提供Ajax功能的函数。增加以下特性即可告知编译器。
[Ajax(true,DebugMode=false)]
public string RegisterUser()
{
return "new user";
}
}
运行结果如下:
上述示例 演示了一个自定义的特性,以及读取出一个类中应用了该特性的方法!
这样就模拟出 在不改变一个类现有功能的前提下我们可以知道该类中哪些方法是用户希望“提供AJAX调用”的功能。
可以理解为Attribute是向一个元素(可以是类,方法,属性,参数等)添加附加信息的角色。而这些附加信息有时对于我们是非常重要的!