0 思维导图

如图 1.1,图片较大建议点开观看。

1 接口

接口是在语言层面上与类相似的一种概念(语法方面),但是它们并不相同。接口声明了实现它的类应该具有的某种能力或者提供某种服务:

public interface ITaxCalculator
{
	int Calculate();
}

这个接口为想要胜任 tax calculator 工作的类提出了一个要求,就是要实现 Calculate() 方法:

public class TaxCalculator : ITaxCalculator
{
	public void Calculate()
	{
		...
	}
}

所以,接口仅仅只是一个声明,并没有实现。接口只能声明方法和属性,不能声明字段,因为接口是一个标准,实现应该交给实现它的类。

在声明接口中的成员时,我们不用指定访问修饰符。

接口使得程序的耦合性降低。因此如果我们使用接口,当类发生了修改,这个修改造成的影响很小,甚至互不影响。

2 接口和可测试性

单元测试是自动化测试的一个部分,它可以用来提升代码的质量。为了实现自动化测试,我们需要编写测试代码。这样做可以在我们修改了代码时及时地帮我们找到 bug。

要进行单元测试,我们需要将需要测试的方法或系统单独分离出来。我们假定其他的类都能够正常运行,在这个前提下,我们对我们需要测试的部分进行测试。

如果一个类强依赖于另一个类,那么我们就没办法将它从系统中分离出来,因此我们需要使用接口,降低它的耦合性,这样才能方便进行单元测试: