不要显示抛出或捕获;
12.4. 自定义异常类型设计规则: 避免太深的继承层次; 要从已有的异常基类继承;
异常类要以“Exception”做为后缀;
要使异常可序列化,使其能跨应用程序域和远程边界仍能正常使用; 要把与安全性有关的信息保存在私有的异常状态中 12.5. 异常与性能
如果在普通场景都会抛出异常,要采用先效验合法性的方式来避免抛出异常引起的性能 问题;
13. 其他规定
为避免频繁改动代码,代码中只写比较简单的和不会经常发生变化的SQL,如果SQL 经常发生变化或是比较复杂,存到SysMisc中,比如统计用到的SQL;
在VS2005开发环境中,采用代码分析工具来做自动化的代码分析,以保证代码质量, 具体的使用建议如下:
A)启用代码分析,并设置当风格不符合要求时为错误而不是警告; B)如果不是做代码审核,此开关应关闭。加上了这个选项的时候编译很慢; C)详设的时候打开开关,检查详设是否符合编程规范; D)所有的选项都应当打开。以下内容需要单独设置:
编码 名称 大类 用法规则
建议
使用等级 警告
CA2209 程序集应声明最小安全性 不建议使用
CA1814 与多维数组相比,首选使性能规用交错的数组
则 性能规则
使用,但降低等 警告
CA1822 将成员标记为 static 较繁锁,且影响代码质量 禁用 禁用
CA2210 程序集应具有有效的强名设计规影响Xcopy部署
称
CA1302 则
禁用
不要对区域设置特定的字全球化很繁琐,并且工具支持的不好。全球化规则全符串进行硬编码 检查 Sql 查询中是否有安全漏洞
规则
部禁用
CA2100 安全性都采用参数化查询,有可能会参数过长;如果规则
是内部参数,也不会有安全问题
警告
14. 参考文档
《.NET设计规范》,本规范很多内容都参考了这本书,书中对规范背后的背景和原则做了深入讨论;
<逆水行舟,不进则退>
C# 编码规范和编程好习惯
2011-2-23 来源:网络
命名惯例和规范
注记: Pascal 大小写形式-所有单词第一个字母大写,其他字母小写。 Camel大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。 类名使用Pascal 大小写形式 public class HelloWorld { ... }
方法使用Pascal 大小写形式 public class HelloWorld {
void SayHello(string name) { ... } }
变量和方法参数使用Camel 大小写形式 public class HelloWorld {
int totalCount = 0; void SayHello(string name) {
string fullMessage = \... }
}
不要使用匈牙利方法来命名变量
以前,多数程序员喜欢它-把数据类型作为变量名的前缀而m_作为成员变量的前缀。例如: string m_sName; int nAge;
然而,这种方式在.NET编码规范中是不推荐的。所有变量都用camel 大小写形式,而不是用数据类型和m_来作前缀。
用有意义的,描述性的词语来命名变量
- 别用缩写。用name, address, salary等代替 nam, addr, sal - 别使用单个字母的变量象i, n, x 等. 使用 index, temp等 用于循环迭代的变量例外: for ( int i = 0; i < count; i++ ) { ... }
如果变量只用于迭代计数,没有在循环的其他地方出现,许多人还是喜欢用单个字母的变量(i) ,而不是另外取名。
- 变量名中不使用下划线 (_) 。 - 命名空间需按照标准的模式命名 ...
文件名要和类名匹配
例如,对于类HelloWorld, 相应的文件名应为 helloworld.cs (或, helloworld.vb) 缩进和间隔
缩进用 TAB . 不用 SPACES.。 注释需和代码对齐.。
花括弧 ( {} ) 需和括号外的代码对齐.。 用一个空行来分开代码的逻辑分组。. bool SayHello (string name) {
string fullMessage = \DateTime currentTime = DateTime.Now;
string message = fullMessage + \: \MessageBox.Show ( message ); if ( ... ) {
// Do something // ... return false; }
return true; }
这段代码看起来比上面的好: bool SayHello ( string name ) {
string fullMessage = \DateTime currentTime = DateTime.Now;
string message = fullMessage + \: \MessageBox.Show ( message ); if ( ... ) {
// Do something // ... return false; }
return true; }
在一个类中,各个方法需用一空行,也只能是一行分开。 花括弧需独立一行,而不象if, for 等可以跟括号在同一行。 好: if ( ... ) { // Do something }
不好: if ( ... ) { // Do something }
在每个运算符和括号的前后都空一格。. 好: if ( showResult == true ) {
for ( int i = 0; i < 10; i++ ) { // } }
不好: if(showResult==true) {
for(int i= 0;i<10;i++) { // } }
良好的编程习惯
遵从以下良好的习惯以写出好程序
避免使用大文件。如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。 避免写太长的方法。一个典型的方法代码在1~25行之间。如果一个方法发代码超过25行,应该考虑将其分解为不同的方法。 方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了
然,就无需用文档来解释方法的功能了。
好: void SavePhoneNumber ( string phoneNumber ) {
// Save the phone number. }
不好: // This method will save the phone number. void SaveData ( string phoneNumber ) {
// Save the phone number. }
一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。 好: // Save the address. SaveAddress ( address );
// Send an email to the supervisor to inform that the address is updated. SendEmail ( address, email ); void SaveAddress ( string address ) { // Save the address. // ... }
void SendEmail ( string address, string email ) {
// Send an email to inform the supervisor that the address is changed. // ... }
不好: // Save address and send an email to the supervisor to inform that the address is updated.
SaveAddress ( address, email );
void SaveAddress ( string address, string email ) { // Job 1.
// Save the address. // ... // Job 2.
// Send an email to inform the supervisor that the address is changed. // ... }
使用C# 或 VB.NET的特有类型,而不是System命名空间中定义的别名类型。 好: int age; string name;