40.  使用一个事件帮助类来公布事件的定义。
  41.  总是使用接口。
  42.  类和接口中的方法和属性至少为2:1的比例。
  43.  避免一个接口中只有一个成员。
  44.  尽量使每个接口中包含3-5个成员。
  45.  接口中的成员不应该超过20个。
  a)  实际情况可能限制为12个
  46.  避免接口成员中包含事件。
  47.  避免使用抽象方法而使用接口替换。
  48.  在类层次中显示接口。
  49.  推荐使用显式的接口实现。
  50.  从不假设一个类型兼容一个接口。
SomeType obj1;
IMyInterface obj2;
/* 假设已有代码初始化过obj1,接下来 */
obj2 = obj1 as IMyInterface;
if (obj2 != null)
{
obj2.Method1();
}
else
{
//处理错误
}
  51.  表现给终用户的字符串不要使用硬编码而要使用资源文件替换之。
  52.  不要硬编码可能更改的基于配置的字符串,比如连接字符串。
  53.  当需要构建长的字符串的时候,使用StringBuilder不要使用string
  54.  避免在结构里面提供方法。
  a)  建议使用参数化构造函数
  b)  可以重裁操作符
  55.  总是要给静态变量提供静态构造函数。
  56.  能使用早期绑定不要使用后期绑定。
  57.  使用应用程序的日志和跟踪。
  58.  除非在不完全的switch语句中否则不要使用goto语句。
  59.  在switch语句中总是要有default子句来显示信息(Assert)。
int number  = SomeMethod();
switch(number)
{
case 1:
Trace.WriteLine("Case 1:");
break;
case 2:
Trace.WriteLine("Case 2:");
break;
default :
Debug.Assert(false);
break;
}
  60.  除非在构造函数中调用其他构造函数否则不要使用this指针。
// 正确使用this的例子
public class MyClass
{
public MyClass(string message )
{}
public MyClass()  : this("hello")
{}
}
  61.  除非你想重写子类中存在名称冲突的成员或者调用基类的构造函数否则不要使用base来访问基类的成员。
// 正确使用base的例子
public class Dog
{
public Dog(string name)
{}
virtual public void Bark( int howLong)
{}
}
public class GermanShepherd : Dog
{
public GermanShe pherd(string name): base (name)
{}
override public void Bark(int  howLong)
{
base .Bark(howLong);
}
}