object contactInfo; 不好: Int16 age; String name; Object contactInfo;
别在程序中使用固定数值,用常量代替。 别用字符串常数。用资源文件。 避免使用很多成员变量。声明局部变量,并传递给方法。不要在方法间共享成员变量。如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。 必要时使enum 。别用数字或字符串来指示离散值。 好: enum MailType { Html, PlainText, Attachment }
void SendMail (string message, MailType mailType) {
switch ( mailType ) {
case MailType.Html: // Do something break;
case MailType.PlainText: // Do something break;
case MailType.Attachment: // Do something break; default: // Do something break; } }
不好: void SendMail (string message, string mailType) {
switch ( mailType ) {
case \// Do something break;
case \// Do something
break;
case \// Do something break; default: // Do something break; } }
别把成员变量声明为 public 或 protected。都声明为 private 而使用 public/protected 的Properties.
不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可编程。 永远别设想你的代码是在“C:”盘运行。你不会知道,一些用户在网络或“Z:”盘运行程序。 应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。必要时检查数据库连接。出现任何问题给用户一个友好的提示。 如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。 如果在配置文件中发现误值,应用程序要抛出错误,给出提示消息告诉用户正确值。 错误消息需能帮助用户解决问题。永远别用象\应用程序出错\\发现一个错误\等错误消息。而应给出象 \更新数据库失败。请确保登陆id和密码正确。\的具体消息。 ? 显示错误消息时,除了说哪里错了,还应提示用户如何解决问题。不要用 象 \更新数据库失败。\这样的,要提示用户怎么做:\更新数据库失败。请确保登陆id和密码正确。\
显示给用户的消息要简短而友好。但要把所有可能的信息都记录下来,以助诊断问题。 注释别每行代码,每个声明的变量都做注释。
在需要的地方注释。可读性强的代码需要很少的注释。如果所有的变量和方法的命名都很有意义,会使代码可读性很强并无需太多注释。 行数不多的注释会使代码看起来优雅。但如果代码不清晰,可读性差,那就糟糕。 如果应为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。 对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。 简言之,要写清晰,可读的代码以致无须什么注释就能理解。 对注释做拼写检查,保证语法和标点符号的正确使用。 异常处理
不要“捕捉了异常却什么也不做“。如果隐藏了一个异常,你将永远不知道异常到底发生了没有。 发生异常时,给出友好的消息给用户,但要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。 只捕捉特定的异常,而不是一般的异常。 好: void ReadFromFile ( string fileName ) { try {
// read from file. }
catch (FileIOException ex) {
// log error.
// re-throw exception depending on your case.
throw; } }
不好: void ReadFromFile ( string fileName ) { try {
// read from file. }
catch (Exception ex) {
// Catching general exception is bad... we will never know whether it // was a file error or some other error.
// Here you are hiding an exception.
// In this case no one will ever know that an exception happened. return \} }
不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。 你可以用应用程序级(线程级)错误处理器处理所有一般的异常。遇到”以外的一般性错误“时,此错误处理器应该捕捉异常,给用户提示消息,在应用程序关闭或用户选择”忽略并继续“之前记录错误信息。 不必每个方法都用try-catch。当特定的异常可能发生时才使用。比如,当你写文件时,处理异常FileIOException. 别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。 这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息 如果应用程序需要,可以编写自己的异常类。自定义异常不应从基类SystemException派生,而要继承于. IApplicationException。
C#编码命名规则
1. 基本规则
第一个字母必须大写,并且后面的并发连结词的第一个字母均为大写 例:GeneralManager、SmallDictionary、StringUtil
2. 接口命名规则
接口名称前加“I_”
interface I_Compare
{ }
int compare();
类的命名.
类名添加cls前缀
public class clsTextBox {
public void DataBind() { } }
WebServer的命名.
类名添加ws前缀
public class wsTextBox {
public void DataBind() { } }
方法、属性的命名.
使用Pascal大小写形式,一般将其命名为动宾短语.
ShowDialog() CreateFile()
变量、参数
使用Camel 大小写形式
例:int totalCount
常量
全部大写,单词之间以 “_” 分隔
例:USER_PASSWORD
代码的缩进
用Tab,而不要用space
其他代码命名规则
? ? ? ?
局部变量的名称要有意义.不要用x,y,z等等(循环变量除外) 所有的成员变量声明在类的顶端,用一个换行把它和方法分开 文件名要能反应类的内容,最好是和类同名,一个文件中一个类. 大括号\要新起一行.
public class AuthorAttribute : Attribute { }
? ?
? ? ?
switch语句一定要有default来处理意外情况
同程序外部连接(数据库、接口、文件等)一定要捕获任何类型的异常(try) 给出友好的消息给用户,必要时用日志记录错误的细节,包括发生的时间,和相关方法,类名等。不要“捕捉了异常却什么也不做” 始终使用\ }\包含if/else下的语句,即使只有一条语句 把引用的系统的namespace和自定义或第三方的分开 自定义的属性以Attribute结尾
public class AuthorAttribute : Attribute { }
? 自定义的异常以Exception结尾
public class AppException : Exception { }
? ? ? ? 注释需和代码对齐
用一个空行来分开代码的逻辑分组 花括弧 ( {} ) 需和括号外的代码对齐
不在代码中使用具体的路径和驱动器名,使用相对路径,并使路径可编程