摘要:
建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间在我们身边的世界中,对象是什么?对象就是事物,俗称“东西”。那么,什么东西算得上是一个对象呢?对象有属性、有行为。以动物为例,比如猫(Cat)。Cat可以有Name,这就是属性;Cat有一个恶习ScratchSofa(挠沙发),这... 阅读全文
摘要:
建议111:避免双向耦合双向耦合是指两个类型之间相互引用。下面的代码是一种典型的双向耦合: class A { private B b; public void MethodA() { b.MethodB(); ... 阅读全文
摘要:
建议110:用类来代替enum枚举(enum)用来表示一组固定的值。例如,为了表示星期信息,我们可以定义枚举Week: enum Week { Monday, Tuesday, Wednesday, Thursday, ... 阅读全文
摘要:
建议109:谨慎使用嵌套类使用嵌套类的原则是:当某类型需要访问另一个类型的私有成员时,才将它实现为嵌套类。一个典型的例子是在实现集合时,要为集合实现迭代器,这时用到了嵌套类。代码如下所示:public class ArrayList : IList, ICollection, IEnumerable... 阅读全文
摘要:
建议108:将类型标识为sealedsealed能够阻止类型被其他类型继承。代码如下: sealed class SampleClass { } class OtherClass : SampleClass { }这段代码提示:“无... 阅读全文
摘要:
建议107:区分静态类和单例有一种观点认为:静态类可以作为单件模式的一种实现方式。事实上,这是不妥当的。按照传统的观点来看,单例是一个实例对象。而静态类并不满足这一点。静态类也直接违反面向对象三大特性的两项:继承和多态。无法让一个静态类从其它类型继承的实例如下: interface ISamp... 阅读全文
摘要:
建议106:为静态类添加静态构造函数静态类可以拥有构造方法,这就是静态构造方法。静态构造方法与实例构造方法比较有几个自己的特点:只被执行一次,且在第一次调用类成员之前被运行时执行。代码无法调用它,不像实例构造方法使用new关键字就可以被执行。没有访问标识符。不能带任何参数。使用静态构造方法的好处是,... 阅读全文
摘要:
建议105:使用私有构造函数强化单例单例指一个类型只生成一个实例对象。单例的一个简单实现如下所示: static void Main(string[] args) { Singleton.Instance.SampleMethod(); ... 阅读全文
摘要:
建议104:用多态代替条件语句假设要开发一个自动驾驶系统。在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型: enum DriveCommand { Start, Stop }当前该枚举存在两个命令:开始、停止。又假设有一个驾驶方法可以处理车辆接... 阅读全文
摘要:
建议103:区分组合和继承的应用场合继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用。继承应该被当做设计架构的有用补充,而不是全部。组合不能用于多态,但组合使用的频率却要远远高于继承。继承UML图如下:对应的代码如下: abstract class Stream... 阅读全文
摘要:
建议102:区分接口和抽象类的应用场合接口和抽象类有一些显而易见的区别:接口支持多继承,抽象类则不能。接口可以包含方法、属性、索引器、事件的签名,但不能有实现,抽象类则可以。接口在增加新方法后,所有的继承者都必须重构,否则编译不通过,而抽象类则不需要。这些区别导致两者的应用场景不同:如果对象存在多个... 阅读全文