给 C# 开发者的代码审查清单

本文提供了详细的编码规范指南,包括代码质量提升、命名规范、异常处理、安全性增强等方面的内容,旨在帮助开发者编写可维护、高效且安全的代码。

0x01.确保没有任何警告(warnings)。

0x02.如果先执行Code Analysis(启用所有Microsoft Rules)再消除所有警告就更好了。

0x03.去掉所有没有用到的usings。编码过程中去掉多余代码是个好习惯。(参考:msdn

0x04.在合理的地方检查对象是否为’null’,避免运行的时候出现Null Reference Exception。

0x05.始终遵循命名规范。一般而言变量参数使用驼峰命名法,方法名和类名使用Pascal命名法。(参考:msdn

0x06.请确保你了解SOLID原则。

根据维基百科定义:在程序设计领域,SOLID (单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分。参考:wiki/SOLID_(面向对象设计)

0x07.代码可重用性:如果一块代码已经被使用超过一次,或者你希望将来使用它,请提取成一个方法。将重复的工作做成通用的方法放在相关的类中,这样一旦你完成别人就可以使用了。将常用功能开发成用户控件,这样可以跨项目重用它们。(参考:

0x08.代码一致性:比方说,Int32写成int,String写成string,应该在代码里保持统一形式。不能一会二写成int一会儿写成Int32。

0x09.代码可读性:代码应该是可维护的,便于其他开发者理解。(参考:msdn

0x10.释放非托管资源,比如文件I/O,网络资源等。一旦使用结束就应该释放它们。如果你想一旦超出使用范围就自动释放对象,可以使用usings将非托管代码括起来。参考:msdn

0x11.合理实现异常处理(try/catch和finally块)和异常记录。参考:msdn

0x12.确保代码中方法的行数不要过多,不超过30到40行。

0x13.及时用代码管理工具check-in/check-out代码。(比如TFS)参考:codeproject.com

0x14.相互审查代码:和你的同事交换代码,实现内部审查。

0x15.单元测试:编写开发测试用例完成单元测试,确保代码被送到QA以前,基本测试完成。参考:msdn

0x16.尽量避免for/foreach循环嵌套和if条件嵌套。

0x17.如果代码只会使用一次,请使用匿名类型。参考:msdn

0x18.尽量使用LINQ查询和Lambda表达式,增加可读性。参考:msdn

0x19.合理使用var、object和dynamic关键字。由于很多开发者会感到困惑或者知道的很少,会觉得它们有些相似,故而交换使用,这是要避免的。参考:blogs.msdn

0x20.使用访问限定符(private, public, protected, internal, protected internal)限定每个方法、类或变量的需要范围。比方说如果一个类只会在程序集内使用,那么定义成internal就足够了。参考:msdn

0x21.在需要保持解耦的地方使用接口,有些设计模式的出现也是由于接口的使用。参考:msdn

0x22.按照用法和需要将类定义为sealed、static或abstract。参考:msdn

0x23.如果需要多次串联,请使用Stringbuilder代替string,这可以节省堆内存。

0x24.检查是否有不可能执行的代码,如果有,请修改。

0x25.在每个方法前注释,说明它的用法、输入类型和返回值类型信息。

0x26.使用类似Silverlight Spy的工具,检查和操控Silverlight应用在运行时对XMAL的渲染,以此来改善效率。这可以在设计执行XAML时,节省大量退回和来回修改的时间。

0x27.使用filddler工具通过检查HTTP/网络流量和带宽,来跟踪web应用和服务的性能。

0x28.如果你想确认Visual Studio以外的方法,请使用WCFTestClient.exe工具,或者装载它的进程到Visual Studio来进行调试。

0x29.在任何合理的地方使用constants和readonly。参考: /msdnmsdn

0x30.尽量避免强制转换和类型转换,因为会造成性能损失。参考:msdn

0x31.对于你想提供自定义信息的类,请重载ToString(来自Object类)。参考:msdn

0x32.避免直接从其他代码中ctrl+c/ctrl+v。一直建议还是自己用手敲,即使你已经找到相关代码。这样可以锻炼自己写代码能力,还能正确理解那段代码的用法。最终你永远都不会忘记那段代码。

0x33.保持阅读书籍和文章的良好习惯,遵循大神们的实践指导。(比如微软专家和一些著名的专家,Martin Fowler, Kent Beck, Jeffrey Ritcher, Ward Cunningham, Scott Hanselman, Scott Guthrie, Donald E Knuth.)

0x34.确认代码是否有内存泄漏。如果有,请确保已修正。参考:blogs.msdn.com

0x35.尽可能参加专家们组织的技术研讨会,可以接触到最新的软件趋势、技术和最佳实践

0x36.要透彻理解OOP概念,并尽可能在代码里实现。

0x37.知道项目设计架构,可以从整体上理解程序的执行流程。

0x38.采取必要措施阻止避免任何交叉脚本攻击、SQL注入和其他安全漏洞。

0x39.永远记得将保密和敏感信息加密(通过使用好的加密算法),比如保存到数据库的密码和保存在web.config文件中的连接字符,要避免被非认证的用户操纵。

0x40.避免对已知类型(原始类型)使用默认关键字,比如int, decimal, bool等。多数情况下,如果不确定是值类型还是引用类型,就使用泛型类型(T)。参考:msdn

0x41.微软(在代码分析条例和指导中)并不推荐使用’out’和’ref’,这些关键字是通过引用传参,请注意,’ref’参数在传入被调用方法之前,应当在调用方法中先初始化,但’out’参数就不是这样。参考:msdn

下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值