一起谈.NET技术,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

目录
相关文章
|
5月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
11月前
|
人工智能 运维 算法
基于 C# 深度优先搜索算法的局域网集中管理软件技术剖析
现代化办公环境中,局域网集中管理软件是保障企业网络高效运行、实现资源合理分配以及强化信息安全管控的核心工具。此类软件需应对复杂的网络拓扑结构、海量的设备信息及多样化的用户操作,而数据结构与算法正是支撑其强大功能的基石。本文将深入剖析深度优先搜索(Depth-First Search,DFS)算法,并结合 C# 语言特性,详细阐述其在局域网集中管理软件中的应用与实现。
245 3
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
291 2
|
11月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
461 0
|
Web App开发 Linux C#
C# 网页截图全攻略:三种技术与 Chrome 路径查找指南
本文主要介绍了在 C# 中实现网页截图的几种技术及相关要点。涵盖了 PuppeteerSharp、Selenium 和 HtmlToImage 三种方式,分别阐述了它们的安装步骤及核心代码。同时,针对在 C# 中寻找 Windows 上 chrome.exe 路径这一问题,分析了未安装 Google Chrome 和已安装两种情况下的查找原因,并给出了相关参考链接,还列举了一系列与 C# 使用 Selenium、获取 chrome.exe 路径以及在 Linux 上部署相关的参考资料。
504 11
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
254 6
|
6月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
323 19
|
7月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
1342 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
349 3
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
1167 12

热门文章

最新文章