您现在的位置: 网页制作教程网 >> 网络编程 >> c# 教程 >> 文章正文

在Visual C#中定义和使用自己的特性

作者:赛迪网

来源:赛迪网

热度:

2007-8-29 13:26:59

Assembly loAssembly =
Assembly.Load( lcAssembly ) ;

Type[ ] laTypes = loAssembly.GetTypes( ) ;

  使用foreach语句在程序集中的每一个类型上迭代。在控制台上输出当前类型的名称,并使用如下的语句查询当前类型,获取有关[DefectTrack]特性的一个数组。

object[ ] laAttributes =
loType.GetCustomAttributes(
typeof( DefectTrackAttribute ),
false ) ;

  你需要在GetCustomAttributes方法上指定typeof(DefectTrackAttribute) 参数,以限制仅仅返回你创建的自定义特性。第二个参数false指定是否搜索该成员的继承链以查找这些自定义特性。

  使用foreach语句迭代自定义特性数组,并把它们(自定义特性)的值输出到控制台上。你应该认识到第一个foreach语句块会创建一个新的变量,并且对当前的特性作类型转化。

DefectTrackAttribute loDefectTrack =
(DefectTrackAttribute)loAtt ;

  这一条语句为什么是必须的呢?GetCustomAttributes()方法会返回一个object数组,你为了访问自定义特性的值,所以必须把这些引用转化为它们真正的具体类的引用。转化完以后,你就可以使用这些特性并且可以把特性的值输出到控制台上。

  因为你可以在任意的类和方法上应用特性,因此程序需要调用当前类型上的方法GetMethods()。

MethodInfo[ ] laMethods =
loType.GetMethods(
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.DeclaredOnly ) ;

  在这个例子里,我给GetMethods()方法传递了一些BindingFlags枚举值。组合使用这三个枚举值,限制仅仅返回在当前的类中直接定义的方法。在这个例子里,之所以这样做,是因为我想限制输出的数量,但是在实际当中,你可能并不需要这样做,因为开发人员可能会在一个重写的方法上应用[DefectTrack]特性。而我的实现代码并没有捕捉应用在这些方法上的特性。

  剩下的代码,从本质上来说,对每一个方法以及每一个类,都在做相同的操作。都是在每一个方法上寻找是否应用了[DefectTrack]特性,如果应用了,就把特性的值输出到控制台上。

  总结

  在这里,我只是利用一个简单的例子,介绍了开发者如何使用.NET特性提高开发进程。自定义特性有点类似于XML,它最大的好处不在于“它做了什么”,它真正最大的好处在于“你可以用它做什么”。这个是真正无止境的,由于自定义特性本身具有开放的特性,这使得它可以拥有更多新颖的用途。

上一页  [1] [2] [3] [4] [5] 


我来说两句:

1分 2分 3分 4分 5分
姓名: *


* 请各位网友遵纪守法并注意语言文明。
网站简介 | 联系方式 | 意见建议 | 版权说明
Copyright © 2007 All rights reserved
滇ICP备06006992号