C#应用Attribute特性 代码统计分析

开发 后端
C#中的Attribute是一种可由用户自由定义的修饰符(Modifier),C#中的Attribute可以用来修饰各种需要被修饰的目标"。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。分别如下:

3:引用XP.AttributeClass

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

  1. [CreaterAttribute("join""2010年12月14日")]    
  2. class class1     
  3.  {          
  4. [CreaterAttribute("join""2010年12月14日")]          
  5. [BugAttribute(true"2010年12月14日")]          
  6. [ReviewerAttribute("hy""2010年12月14日")]          
  7. private void Test1()         
  8.  {         
  9.  }          
  10. [ReviewerAttribute("hy""2010年12月14日")]            
  11. public void Test2()         
  12.  {         
  13.  }          
  14. public void Test3()         
  15.  {         
  16.  }    } 

4:统计分析模块XP.CodeStatistics

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

 

5:生成报表

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

 

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

6:IL代码查看

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

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

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

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

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

 

  1.     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]   
  2.  public class CreaterAttribute : Attribute     
  3.  {          
  4. public CreaterAttribute(string creater, string createDate)         
  5.  {              
  6. Creater = creater;             
  7.  CreateDate = createDate;         
  8.  }          
  9. public string Creater { getprivate set; }          
  10. public string CreateDate { getprivate set; }     
  11.  }     
  12.  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]      
  13. public class ReviewerAttribute : Attribute    {       
  14.  public ReviewerAttribute(string reviewer, string reviewDate)         
  15.  {              
  16. Reviewer = reviewer;              
  17. ReviewDate = reviewDate;          
  18. }          
  19. public string Reviewer { getprivate set; }       
  20.  public string ReviewDate { getprivate set; }   
  21.    }      
  22. [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]      
  23. public class BugAttribute : Attribute      
  24. {         
  25.  public BugAttribute(bool isBug, string bugDate)        {              
  26. this.IsBug = isBug;              
  27. this.BugDate = bugDate;         
  28.  }          
  29. public bool IsBug { getprivate set; }         
  30.  public string BugDate { getprivate set; }   
  31.    } 

关于C#特性Attribute的知识,初步先讲到这里,希望本文对您能起到作用。

原文链接:http://www.cnblogs.com/luminji/archive/2010/12/29/1920452.html

【编辑推荐】

  1. Attribute初体验- 上善若水润物无声
  2. 学习C#:Attribute与Property
  3. 浅谈C#缓冲区溢出的秘密
  4. C#中数据本地存储方案之SQLite
责任编辑:佚名 来源: 博客园
相关推荐

2015-02-27 09:53:06

Countly

2019-09-18 09:05:58

技术SQLDevOps

2015-08-19 09:40:51

统计分析

2012-09-25 14:18:51

Linux桌面环境

2024-11-07 11:10:34

Python脚本统计分析

2009-06-29 15:25:21

SessionJSP

2014-06-04 09:42:41

工业控制系统APT

2011-03-14 14:41:59

大数据数据中心

2011-05-27 13:56:04

网站流量

2015-01-05 17:28:02

JMP

2010-06-01 14:30:06

Mrtg教程

2014-10-28 14:59:42

手游付费行为数据统计分析

2013-09-10 14:50:12

数组面试题

2010-06-07 17:26:41

Mrtg教程

2022-02-18 12:58:35

go-monitor工具服务质量

2021-06-10 09:53:04

数据统计统计分析数据

2016-12-01 17:33:52

微信

2011-05-27 14:03:22

网站流量

2020-05-15 15:21:58

SPSS数据分析

2023-10-25 09:39:46

点赞
收藏

51CTO技术栈公众号