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

简介:

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

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://www.cnblogs.com/luminji/archive/2010/12/29/1920452.html,如需转载请自行联系原作者

相关文章
|
5天前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
5天前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
3天前
|
存储 程序员 C#
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
|
3天前
|
程序员 C# Python
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
|
5天前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
13 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
5天前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
8 0
|
5天前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
5天前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
5天前
|
开发框架 Linux C#
C#编程的跨平台应用
【4月更文挑战第21天】C#与.NET Core的结合使得跨平台应用开发变得高效便捷,提供统一编程模型和高性能。丰富的类库、活跃的社区支持及Visual Studio Code、Xamarin等工具强化了其优势。广泛应用在企业系统、云服务和游戏开发中,虽面临挑战,但随着技术进步,C#在跨平台开发领域的前景广阔。
|
5天前
|
数据采集 JSON 前端开发
从代码到内容:使用C#和Fizzler探索Instagram的深处
Instagram是一个流行的社交媒体平台,拥有数亿的用户和海量的图片和视频内容。如果您想要从Instagram上获取一些有用的信息或数据,您可能需要使用爬虫技术来自动化地抓取和分析网页内容。本文将介绍如何使用C#和Fizzler这两个强大的工具,来实现一个简单而高效的Instagram爬虫,从代码到内容,探索Instagram的深处。