养成 C# 编码规范和编程的好习惯‖但是以最有效率的方式编码
的编程经验可以让你写出“可运
就需要下更多的功夫!
| 行应用程序”。让它可运行容易,
| 要知道,大多数程序员
前面提到,你想成为你们公
学习和实践它。
| 在写”可运行代码,“而不是”
司”最尊贵的专业人员“吗?写
| 高效代码“。我们在这个指南课程
”高效代码“是一项艺术,你必须
|
| Pascal 大小写形式-所有单词第一个字母大写,其他字母小写。 |
Camel 大小写形式-
| 除了第一个单词,所有单词第一
| 个字母大写,其他字母小写。
|
| void SayHello(string name) |
| void SayHello(string name) |
| string fullMessage = "Hello " + name; |
以前,多数程序员喜欢它-把数据类
:
| 型作为变量名的前缀而m_作为成员变量的前缀。例如
|
然而,这种方式在.NET编码规范中是
用数据类型和m_来作前缀。
| 不推荐的。所有变量都用camel 大小写形式,而不是
|
- 别用缩写。用name,
| address, salary等代替 nam, a
| ddr, sal
|
- 别使用单个字母的变量象i, n, x
| 等. 使用 index, temp等
|
| for ( int i = 0; i < count; i++ ) |
如果变量只用于迭代计
量(i) ,而不是另外取名。
| 数,没有在循环的其他地方出现
| ,许多人还是喜欢用单个字母的变
|
例如,对于类HelloWor
| ld, 相应的文件名应为 hellowo
| rld.cs (或, helloworld.vb)
|
| bool SayHello (string name) |
| string fullMessage = "Hello " + name; |
| DateTime currentTime = DateTime.Now; |
string message = f
e.ToShortTimeString();
| ullMessage + ", the time is
| : " + currentTim
|
| MessageBox.Show ( message ); |
| bool SayHello ( string name ) |
| string fullMessage = "Hello " + name; |
| DateTime currentTime = DateTime.Now; |
string message = fullMessage
currentTime.ToShortTimeString();
| + ", the time is : " +
|
| MessageBox.Show ( message ); |
| 在一个类中,各个方法需用一空行,也只能是一行分开。 |
| 花括弧需独立一行,而不象if, for 等可以跟括号在同一行。. |
| if ( showResult == true ) |
| for ( int i = 0; i < 10; i++ ) |
避免使用大文件。如果一个文件里的
中。
| 代码超过300~400行,必须考虑将代码分开到不同类
|
避免写太长的方法。一
,应该考虑将其分解为不同
| 个典型的方法代码在1~25行之
的方法。
| 间。如果一个方法发代码超过25行
|
方法名需能看出它作什
来解释方法的功能了。
| 么。别使用嵋鹞蠼獾拿帧?br>
| 如果名字一目了然,就无需用文档
|
void SavePhoneNumber ( string p
| honeNumber )
|
| // Save the phone number. |
// This method will
| save the phone number.
|
| void SaveData ( string phoneNumber ) |
| // Save the phone number. |
| 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。 |
// Send an email to
| the supervisor to inform th
| at the address is updated.
|
| SendEmail ( address, email ); |
| void SaveAddress ( string address ) |
void SendEmail ( string address
| , string email )
|
// Send an email t
| o inform the supervisor that
| the address is changed.
|
// Save address and send an ema
address is updated.
| il to the supervisor to inform that the
|
| SaveAddress ( address, email ); |
void SaveAddress (
| string address, string email
| )
|
// Send an email t
| o inform the supervisor that
| the address is changed.
|
使用C# 或 VB.NET的特有类型,而不
| 是System命名空间中定义的别名类型。
|
避免使用很多成员变量
果在几个方法间共享一个成
| 。声明局部变量,并传递给方法
员变量,那就很难知道是哪个方
| 。不要在方法间共享成员变量。如
法在什么时候修改了它的值。
|
| 必要时使用enum 。别用数字或字符串来指示离散值。 |
void SendMail (string message,
| MailType mailType)
|
| case MailType.Attachment: |
void SendMail (string message,
| string mailType)
|
别把成员变量声明为 p
public/protected 的Prope
| ublic 或 protected。都声明为
rties.
| private 而使用
|
| 不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可编程。 |
永远别设想你的代码是
序。
| 在“C:”盘运行。你不会知道,
| 一些用户在网络或“Z:”盘运行程
|
应用程序启动时作些“自检”并确保
接。出现任何问题给用户一个友好的提示
| 所需文件和附件在指定的位置。必要时检查数据库连
。
|
| 如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。 |
| 如果在配置文件中发现错误值,应用程序要抛出错误,给出提示消息告诉用户正确值。 |
错误消息需能帮助用户解决问题。永
消息。而应给出象 "更新数据库失败。请
| 远别用象"应用程序出错", "发现一个错误" 等错误
确保登陆id和密码正确。" 的具体消息。
|
显示错误消息时,除了
库失败。"这样的,要提示
| 说哪里错了,还应提示用户如何
用户怎么做:"更新数据库失败
| 解决问题。不要用 象 "更新数据
。请确保登陆id和密码正确。"
|
| 显示给用户的消息要简短而友好。但要把所有可能的信息都记录下来,以助诊断问题。 |
在需要的地方注释。可
有意义,会使代码可读性很
| 读性强的代码需要很少的注释。
强并无需太多注释。
| 如果所有的变量和方法的命名都很
|
| 行数不多的注释会使代码看起来优雅。但如果代码不清晰,可读性差,那就糟糕。 |
| 如果应为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。 |
| 对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。 |
| 简言之,要写清晰,可读的代码以致无须什么注释就能理解。 |
不要“捕捉了异常却什
了没有。
| 么也不做“。如果隐藏了一个异
| 常,你将永远不知道异常到底发生
|
发生异常时,给出友好
间,和相关方法,类名等。
| 的消息给用户,但要精确记录错
| 误的所有可能细节,包括发生的时
|
| void ReadFromFile ( string fileName ) |
| catch (FileIOException ex) |
// re-throw exce
| ption depending on your case
| .
|
| void ReadFromFile ( string fileName ) |
// Catching general exception
| is bad... we will never know whether it
|
// was a file err
| or or some other error.
|
| // Here you are hiding an exception. |
// In this case n
| o one will ever know that an
| exception happened.
|
不必在所有方法中捕捉一般异常。不
数的错误。
| 管它,让程序崩溃。这将帮助你在开发周期发现大多
|
你可以用应用程序级(
误“时,此错误处理器应该
并继续“之前记录错误信息
| 线程级)错误处理器处理所有一
捕捉异常,给用户提示消息,在
。
| 般的异常。遇到”以外的一般性错
应用程序关闭或 用户选择”忽略
|
不必每个方法都用try-catch。当特
处理异常FileIOException.
| 定的异常可能发生时才使用。比如,当你写文件时,
|
别写太大的 try-catch
块。 这将帮你找出哪一段
| 模块。如果需要,为每个执行
代码产生异常,并给用户发出特
| 的任务编写单独的 try-catch 模
定的错误消息
|
如果应用程序需要,可
生,而要继承于. IApplica
| 以编写自己的异常类。自定义异
tionException。
| 常不应从基类SystemException派
|
上一页> 下一页>