多接口继承

Tim*_*ong 5 c# interface

我正在实现一组类和相应的接口,我希望每个类都有一组公共属性和一组仅特定于该类的专用属性.所以,我正在考虑按以下方式定义接口:

interface ICommon {...}  // Members common to all widgets
interface IWidget1 {...} // specialized members of widget type 1
interface IWidget2 {...} // specialized members of widget type 2
Run Code Online (Sandbox Code Playgroud)

我试图在接口或类中继承.所以,具体来说,我可以这样做:

interface IWidget1 : ICommon {...}
interface IWidget2 : ICommon {...}
class Widget1 : IWidget1 {...}
class Widget2 : IWidget2 {...}
Run Code Online (Sandbox Code Playgroud)

......或者像这样......

class Widget1: ICommon, IWidget1 {...}
class Widget2: ICommon, IWidget2 {...}
Run Code Online (Sandbox Code Playgroud)

是否有任何令人信服的理由去某种方式?

更新:如果类必须COM可见,它会影响答案吗?

Jos*_*osh 6

当且仅当实现IWidget1的类型还必须实现ICommon时,您应该选择接口继承.在任何一种情况下,该类都将分别实现IWidget1和ICommon.唯一的区别是,如果你从ICommon中"导出"IWidget1,你就强制执行IWidget1也必须是一个ICommon的事实.

一个很好的例子是IEnumerable和ICollection.每个ICollection都保证是IEnumerable,因此ICollection派生自IEnumerable.如果成为集合是合法的或有意义但不可枚举,那么ICollection的实现者也不必实现IEnumerable.

无论您选择哪种方式都不会影响COM的可见性.如果我没记错的话,.NET仍会单独导出接口.