.NET 指南:接口的设计

接口为实现者必须要提供的成员集合而定义了签名。并且不能够为接口的成员提供实现的细节。例如,ICollection 接口就定义了与集合操作相关的成员。每个实现了接口的具体类都必须为这些成员而提供具体的实现细节。虽然被派生的类只能够从一个单独的类进行继承,但是它们能够同时实现多个接口。下列指南有助于确保你的接口是被正确设计的。

如果你需要提供一些通过包括值类型的类型集合而被支持的公共功能,就可以定义一个接口。

值类型必须继承自 ValueType。出于这个原因,抽象类就不能够被用来为值类型指定一个约定;而必须使用接口来作为替代。

如果你需要在已经继承自其他类型的类型中来支持它的功能,就可以考虑定义一个接口。
避免使用标记器接口(没有成员的接口)。

自定义属性提供了一种标记类型的方式。更多关于自定义参数的信息,请参考:[编写自定义属性]。在代码被执行之前,你能够推迟属性的检查的时候,自定义属性就是首选。如果在你的开发情节中需要在编译时进行检查,那么你就不能够继续遵守这个指导方针了。

提供至少一个是由接口所实现的类型。

这有助于确保接口是被良好定义的并且在没有太多难度的情况下能够被实现。Int32 类就为 ICompare 接口提供了实现。

提供至少一个对每个被定义接口进行消耗的成员(例如,一个获取接口作为参数或者获取一个与接口一样被类型化的属性的方法)。

这是另外一种有助于确保接口是被良好定义的机制并且在没有太多难度的情况下能够被使用。

把成员添加到先前被承载的接口中。

添加新的成员将会破坏在接口的早先版本中被实现的代码。这是一个最主要的原因,通常这也是有可能的,类是比接口更加可取的一种方式。关于更多信息,请参考:[.NET 类库:类与接口之间的选择]。

如果接口的承载定义需要附加的成员,那么你可以实现一个新的接口和适当的成员来消耗它。

你可能感兴趣的:(.net)