}
while (condition);
switch语句,每个switch里都应包含default子语句,格式如下: switch (condition) {
case ABC: statements; /* falls through */ case DEF: statements; break; case XYZ: statements; break; default: statements; break; }
try-catch语句格式如下: try {
statements; }
catch (ExceptionClass e) {
statements; } finally {
statements; }
9. 类型设计规范
要确保每个类型由一组定义明确,相互关联的成员组成,而不仅仅是一些无关功能的随 机集合;
9.1. 类型和命名空间
要用命名空间把类型组织成相关域的层次结构。例如: 界面层:Techstar.ProductionCenter;
业务逻辑层:Techstar.ProductionCenter.Business; 数据访问层:Techstar.ProductionCenter.Data; 避免过深的命名空间; 避免太多的命名空间; 9.2. 类型和接口的选择 要优先采用类而不是接口。
接口的缺点在于语义变化时改变困难。注意接口并不是协定,把协定和实现分开并非一 定用接口实现,用基类和抽象类同样可以表达;
建议使用抽象类而不是接口来解除协定与实现间的偶合; 要定义接口,来实现类似多重继承的效果;
精心定义接口的标志是一个接口只做一件事情。关键是接口的协定需要保持不变, 如果一个接口包含太多功能,那么这个胖接口产生变化的机会就会大得多。
9.3. 抽象类设计:
不要在抽象类中定义公有的或内部受保护的构造函数。因为抽象类无法实例化,所以这 种设计会误导用户;
要为抽象类定义受保护的构造函数或内部构造函数; 9.4. 静态类设计
静态类是一个只包含静态成员的类,它提供了一种纯面向对象设计和简单性之间的一个权衡,广泛用来提供类似于全局变量或一些通用功能。
要少用静态类。静态类应该仅用作辅助类;
避免把静态类当作杂物箱。每个静态类都应该有其明确目的; 不要在静态类中声明或覆盖实例成员; 9.5. 枚举设计
要用枚举来加强那些表示值的集合的参数,属性以及返回值的类型性; 要优先使用枚举而不是静态常量。例如: //不好的写法
public static class Color {
public static int Red = 0; public static int Green = 1; public static int Blue = 2; }
//好的写法 public enum Color {
Red, Green, Blue }
不要把枚举用于开放的场合,例如操作系统的版本,朋友的名字等; 枚举最后一个值不要加逗号;
枚举中不要提供为了今后使用而保留的枚举值;
10. 成员设计规范
方法,属性,事件,构造函数以及字段等统称为成员。 10.1. 成员设计的一般规范 10.2. 方法的重载规范;
避免在重载中随意的给参数命名。如果两个重载中的某个参数表示相同的输入,那么该参数的名字应该相同。例如:
public class String {
//好的写法
public int IndexOf(string value) { ...}
public int IndexOf(string value, int startIndex) { ...} //不好的写法
public int IndexOf(string value) { ...}
public int IndexOf(string str, int startIndex) { ...} }
避免使重载成员的参数顺序不一致。在所有的重载中,同名参数应该出现在相同的位置。 例如:
public class EventLog {
public EventLog();
public EventLog(string logName);
public EventLog(string logName, string machineName);
public EventLog(string logName, string machineName, string source); }
较短的重载应该仅仅调用较长的来实现。另外,重载如果需要扩展性,把最长重载 做成虚函数。例如:
public class String {
public int IndexOf(string s) { //调用
return IndexOf(s, 0); }
public int IndexOf(string s, int startIndex) { //调用
return IndexOf(s, startIndex, s.Length); }
public virtual int IndexOf(string s, int startIndex, int Count) {
//实际的代码