{} }
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); } }
62. 基于模板的时候要实现Dispose()和Finalize()两个方法。
63. 通常情况下避免有从System.Object转换来和由System.Object转换去的代码,而使用强制转换或者as操作符替换。 class SomeClass {} //避免:
class MyClass
void SomeMethod(T t)
- 21 -
{
object temp = t;
SomeClass obj = (SomeClass)temp; } } // 正确:
class MyClass
void SomeMethod(T t) {
SomeClass obj = t; } }
64. 在一般情况下不要定义有限制符的接口。接口的限制级别通常可以用强类型来替换之。 public class Customer {?} //避免:
public interface IList
public interface ICustomerList : IList
65. 不确定在接口内的具体方法的限制条件。
66. 总是选择使用C#内置(一般的generics)的数据结构
67、初始化类的实例时,除非十分必要,否则不要赋null值。
68、使用后的实例,尽量不要将该实例的引用赋值和为nul,尤其是采用public来修饰的类成员l。 1) 如果该实例是临时引用,请使用using语句,然后在程序块中使用。
2) 如果需要释放资源,应可能地使用Dispose,采用null值的方法,该引用在指向下一个实例前,不会
- 22 -
被回收。
- 23 -