更新: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 库的约定、术语和模式》)。