接口设计

更新:2007 年 11 月

接口定义实施者必须提供的一组成员的签名。接口不能提供成员的实现细节。例如,ICollection 接口定义与使用集合相关的成员。实现该接口的每个具体类都必须提供这些成员的实现细节。虽然类只能从单个类继承,但可以实现多个接口。下面的准则有助于确保正确设计接口。

如果一组包含某些值类型的类型需要支持某些常用功能,则必须定义接口。

值类型必须从 ValueType 继承。因此,抽象类不能用于指定值类型的协定;而必须改用接口。

避免使用标记接口(没有成员的接口)。

自定义属性提供了一种标记类型的方式。有关自定义属性的更多信息,请参见编写自定义属性。如果可以将属性检查推迟到执行代码时才进行,则首选自定义属性。如果需要进行编译时检查,则不能使用此准则。

请提供至少一种接口实现的类型。

这样有助于确保正确设计和顺利实现接口。Int32 类提供 IComparable 接口的一个实现。

对于定义的每个接口,请提供至少一个使用该接口的成员(例如,采用该接口作为参数的方法,或类型化为接口的属性)。

这是另一种有助于确保正确设计和顺利使用接口的机制。

不要向以前提供的接口添加成员。

添加新成员需要修改实现以前版本的接口的代码。这就是为什么在可能的情况下,通常首选使用类而不是接口的主要原因之一。有关更多信息,请参见在类和接口之间选择

如果接口的交付定义要求更多成员,则可以实现新的接口和使用该接口的适当成员。

部分版权所有 2005 Microsoft Corporation。保留所有权利。

部分版权所有 Addison-Wesley Corporation。保留所有权利。

有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。

请参见

概念

在类和接口之间选择

其他资源

类型设计准则

类库开发的设计准则