|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。.NETFramework中对Attribute的撑持是一个全新的功效,这类撑持来自它的Attribute类。在你的程序中得当地利用这个类,大概是天真奇妙天时用这个类,将使你的程序取得某种在以往编程中很难做到的才能。我们来看一个例子:
假设你是一个项目开辟小组中的成员,你想要跟踪项目代码反省的信息,一般你能够把代码的反省信息保留在数据库中以便查询;大概把信息写到代码的正文内里,如许能够浏览代码的同时看到代码被反省的信息。我们晓得.NET的组件是自形貌的,那末是不是可让代码本人来形貌它被反省的信息呢?如许我们既能够将信息和代码保留在一同,又能够经由过程代码的自我形貌失掉信息。谜底就是利用Attribute.
上面的步骤和代码告知你怎样做:
起首,我们创立一个自界说的Attribute,而且事前设定我们的Attribute将施加在class的元素下面以猎取一个类代码的反省信息。
usingSystem;
usingSystem.Reflection;
[AttributeUsage(AttributeTargets.Class)]//还记得上一节的内容吗?
publicclassCodeReviewAttribute:System.Attribute//界说一个CodeReview的Attribute
{
privatestringreviewer;//代码反省人
privatestringdate;//反省日期
privatestringcomment;//反省了局信息
//参数机关器
publicCodeReviewAttribute(stringreviewer,stringdate)
{
this.reviewer=reviewer;
this.date=date;
}
publicstringReviewer
{
get
{
returnreviewer;
}
}
publicstringDate
{
get
{
returndate;
}
}
publicstringComment
{
get
{
returncomment;
}
set
{
comment=value;
}
}
}
我们的自界说CodeReviewAttribute同一般的类没有区分,它从Attribute派生,同时经由过程AttributeUsage暗示我们的Attribute仅能够施加到类元素上。
第二步就是利用我们的CodeReviewAttribute,假设我们有一个Jack写的类MyClass,反省人Niwalker,反省日期2003年7月9日,因而我们施加Attribute以下:
[CodeReview("Niwalker","2003-7-9",Comment="Jack的代码")]
publicclassMyClass
{
//类的成员界说
}
当这段代码被编译的时分,编译器会挪用CodeReviewAttribute的机关器而且把"Niwalker"和"2003-7-9"分离作为机关器的参数。注重到参数表中另有一个Comment属性的赋值,这是Attribute独有的体例,这里你能够设置更多的Attribute的大众属性(假如有的话),必要指出的是.NETFramework1.0同意向private的属性赋值,但在.NETFramework1.1已不同意如许做,只能向public的属性赋值。
第三步就是掏出我们必要的信息,这是经由过程.NET的反射来完成的,关于反射的常识,限于篇幅我不盘算在这里举行申明,大概我会在今后别的写一篇先容反射的文章。
classtest
{
staticvoidMain(string[]args)
{
System.Reflection.MemberInfoinfo=typeof(MyClass);//经由过程反射失掉MyClass类的信息
//失掉施加在MyClass类上的定制Attribute
CodeReviewAttributeatt=
(CodeReviewAttribute)Attribute.GetCustomAttribute(info,typeof(CodeReviewAttribute));
if(att!=null)
{
Console.WriteLine("代码反省人:{0}",att.Reviewer);
Console.WriteLine("反省工夫:{0}",att.Date);
Console.WriteLine("正文:{0}",att.Comment);
}
}
}
在下面这个例子中,Attribute饰演着向一个类增加分外信息的脚色,它其实不影响MyClass类的举动。经由过程这个例子,我们大抵能够晓得怎样写一个自界说的Attribute,和怎样在使用程序利用它。下一节,我将先容怎样利用Attribute来主动天生ADO.NET的数据会见类的代码。不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听) |
|