C#特性Attribute的实际应用之:代码统计分析

简介: 日常工作中,需要为程序集提供统计分析: 1:程序集方法数; 2:开发人员数目及各自所开发或REVIEW的方法数; 3:测试中,被标注有BUG的数目; 4:直接查看方法的IL代码; 鉴于以上统计的需要,特开发本EXE。

 

日常工作中,需要为程序集提供统计分析:

1:程序集方法数;

2:开发人员数目及各自所开发或REVIEW的方法数;

3:测试中,被标注有BUG的数目;

4:直接查看方法的IL代码;

鉴于以上统计的需要,特开发本EXE。

 

1:关于特性Attribute的知识补充

    "Attribute是一种可由用户自由定义的修饰符(Modifier),可以用来修饰各种需要被修饰的目标"。它的作用是为它们的修饰目标追加上一些额外的信息——比如"这个类是我写的"或者"这个函数以前出过问题"等等。

    它跟注释的区别是:注释是对程序源代码的一种说明,主要目的是给人看的,在程序被编译的时候会被编译器所丢弃,因此,它丝毫不会影响到程序的执行。而Attribute是程序代码的一部分,不但不会被编译器丢弃,而且还会被编译器编译进程序集(Assembly)的元数据(Metadata)里,在程序运行的时候,你随时可以从元数据里提取出这些附加信息来决策程序的运行。

    本文所依据的就是特性这个特点。

 

2:基础模块XP.AttributeClass

    根据文章开头的要求:统计开发者、reviewer、bug信息,需要创建一个可被客户端项目引用的类库项目XP.AttributeClass。该项目包含三个Attribute类:CreaterAttribute、ReviewerAttribute、BugAttribute。分别如下:

 

代码
 
  
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false )]
public class CreaterAttribute : Attribute
{
public CreaterAttribute( string creater, string createDate)
{
Creater
= creater;
CreateDate
= createDate;
}
public string Creater { get ; private set ; }
public string CreateDate { get ; private set ; }
}

[AttributeUsage(AttributeTargets.Class
| AttributeTargets.Method, AllowMultiple = true )]
public class ReviewerAttribute : Attribute
{
public ReviewerAttribute( string reviewer, string reviewDate)
{
Reviewer
= reviewer;
ReviewDate
= reviewDate;
}
public string Reviewer { get ; private set ; }
public string ReviewDate { get ; private set ; }
}

[AttributeUsage(AttributeTargets.Method, AllowMultiple
= false )]
public class BugAttribute : Attribute
{
public BugAttribute( bool isBug, string bugDate)
{
this .IsBug = isBug;
this .BugDate = bugDate;
}
public bool IsBug { get ; private set ; }
public string BugDate { get ; private set ; }
}

       

3:引用XP.AttributeClass

在我们自己的程序集中,需要为自己的类或方法加上这类特性,参考如下:

 

代码
 
  
[CreaterAttribute( " join " , " 2010年12月14日 " )]
class class1
{
[CreaterAttribute(
" join " , " 2010年12月14日 " )]
[BugAttribute(
true , " 2010年12月14日 " )]
[ReviewerAttribute(
" hy " , " 2010年12月14日 " )]
private void Test1()
{

}
[ReviewerAttribute(
" hy " , " 2010年12月14日 " )]
public void Test2()
{

}
public void Test3()
{

}
}

 

4:统计分析模块XP.CodeStatistics

    XP.CodeStatistics是本工具的核心模块,包括了四个功能:获取程序集、获取IL代码、统计分析。核心类如下,本文不再赘述,请直接查看源码。

 

5:生成报表

    由于对客户端程序集添加了如上的特性信息的,所以,通过分析程序集,我们可以很方法得到如下的报表:

    备注:从项目管理的角度来说,本报表,仅仅是对工作量和代码质量的一个辅助参考,但有此参考,会比没有好。

 

6:IL代码查看

    细心的人,可能已经发现,上表所统计的仅仅是IL的代码行数,而不是实际代码行数。这是因为:

    1:首先,本分析工具是对程序集进行分析。所谓程序集,就是编译为IL代码的托管代码;

    2:理论上,从IL代码能反编译为托管代码(就像Reflactor一样),但是,太复杂了,我们没有去实现;

    3:即使反编译IL代码,得到的也不是原始的代码。如果要分析原始代码的,可以采用其它现成工具。

    所以,既然我们统计的是IL代码,所以,本工具的一个辅助功能就是IL代码的查看。本工具主页面:

 

源码下载地址:

http://download.csdn.net/source/2946944

备注(参考):

http://www.cnblogs.com/luminji/archive/2010/11/30/1891692.html

http://www.codeproject.com/KB/cs/sdilreader.aspx

http://blog.csdn.net/fantasiax/archive/2007/05/28/1627694.aspx

http://blog.csdn.net/fantasiax/archive/2007/06/04/1636913.aspx

 

 

Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
11月前
|
监控 JavaScript 索引
07avalon - 监控数组与非监控属性
07avalon - 监控数组与非监控属性
41 0
|
4月前
|
编译器 C#
C#.Net筑基-类型系统②常见类型 --record是什么类型?
`record`在C#中是一种创建简单、只读数据结构的方式,常用于轻量级数据传输。它本质上是类(默认)或结构体的快捷形式,包含自动生成的属性、`Equals`、`ToString`、解构赋值等方法。记录类型可以继承其他record或接口,但不继承普通类。支持使用`with`语句创建副本。例如,`public record User(string Name, int Age)`会被编译为包含属性、相等比较和`ToString()`等方法的类。记录类型提供了解构赋值和自定义实现,如密封的`sealed`记录,防止子类重写。
|
10月前
Attribute特性的原理
Attribute特性的原理
42 0
|
10月前
|
C#
c#之Attribute特性的原理
c#之Attribute特性的原理
47 0
|
算法
白话Elasticsearch15-深度探秘搜索技术之使用copy_to定制组合field解决cross-fields搜索弊端
白话Elasticsearch15-深度探秘搜索技术之使用copy_to定制组合field解决cross-fields搜索弊端
77 0
|
程序员
Attribute(特性),怎么用才更好? —— 字段编号被误解了
  上一篇里(Attribute(特性),怎么用才更好? ),有人说,“坚决杜绝magic number ”,这个magic number指的就是字段编号吧,其实您误解了。   一提到字段编号,可能有些人的第一反应就是这样的用法:     Person1.2000020,或者Person1[2000020],或者ds[2000020]。
890 0
|
XML Java 数据格式
Attribute(特性),怎么用才更好?
前几年:   2008年的某一天,我坐火车去北京。硬卧上铺,一晚上就到北京了。爬到上铺之后发现,旁边上铺有一老兄抱着一个笔记本,一开始还以为是看电影呢,仔细一看才发现——老天呀,居然在写代码!     这老兄也太工作狂了,当时可是晚上九点多了呀。
1018 0
|
BI C#
一起谈.NET技术,C#特性Attribute的实际应用之:代码统计分析
  日常工作中,需要为程序集提供统计分析:   1:程序集方法数;   2:开发人员数目及各自所开发或REVIEW的方法数;   3:测试中,被标注有BUG的数目;   4:直接查看方法的IL代码;   鉴于以上统计的需要,特开发本EXE。
1156 0
|
BI C#
C#特性Attribute的“.NET研究”实际应用之:代码统计分析
  日常工作中,需要为程序集提供统计分析:   1:程序集方法数;   2:开发人员数目及各自所开发或REVIEW的方法数;   3:测试中,被标注有BUG的数目;   4:直接查看方法的IL代码;   鉴于以上统计的需要,特开发本EXE。
801 0