在C#中,一个类可以从另一个类和一个接口inheritance吗?

我想知道一个类是否可以从类和接口inheritance。 下面的示例代码不起作用,但我认为它传达了我想要做的事情。 我想这样做的原因是因为在我的公司我们制造USB,串行,以太网等设备。 我正在尝试开发一个通用的组件/接口,用于为我们所有的设备编写程序,这将有助于保持所有应用程序的常见事物(如连接,断开连接,获取固件)。

要添加到这个问题:如果GenericDevice是在不同的项目,我可以把IOurDevices接口在该项目然后使USBDevice类实现接口,如果我添加一个引用到第一个项目? 因为只想引用一个项目,然后根据设备的不同而实现不同的接口。

class GenericDevice { private string _connectionState; public connectionState { get{return _connectionState; } set{ _connectionState = value;} } } interface IOurDevices { void connectToDevice(); void DisconnectDevice(); void GetFirmwareVersion(); } class USBDevice : IOurDevices : GenericDevice { //here I would define the methods in the interface //like this... void connectToDevice() { connectionState = "connected"; } } //so that in my main program I can do this... class myProgram { main() { USBDevice myUSB = new USBDevice(); myUSB.ConnectToDevice; } } 

是。 尝试:

 class USBDevice : GenericDevice, IOurDevice 

注意:基类应该在接口名称列表之前。

当然,你仍然需要实现接口定义的所有成员。 但是,如果基类包含与接口成员相匹配的成员,则基类成员可以作为接口成员的实现工作,并且不需要再次手动实现。

不,不完全是。 但它可以inheritance一个类并实现一个或多个接口。

讨论这样的概念时,明确的术语是很重要的。 例如,你会看到Jon Skeet的作品之一就是在他和他的作品中都是精确的。

无关的问题(Mehrdad的答案应该让你去),我希望这不是nitpicky:类不inheritance接口,他们实现它们。

.NET不支持多重inheritance,所以保持直接的条款可以帮助沟通。 一个类可以从一个超类inheritance,并且可以实现尽可能多的接口。


为了回应Eric的评论…我和另一个开发人员讨论了接口是否inheritance了“inheritance”,“实现”,“需要”或“携带”接口,如下所示:

 public interface ITwo : IOne 

技术上的答案是ITwo会inheritanceIOne ,原因如下:

  • 接口从来没有实现,所以认为ITwo 实现 IOne是错误的
  • ITwoinheritanceIOne方法,如果在IOne存在MethodOne() ,则它也可以从ITwo 。 即: ((ITwo)someObject).MethodOne())是有效的,即使ITwo没有显式包含MethodOne()
  • …因为运行时间这么说! typeof(IOne).IsAssignableFrom(typeof(ITwo))返回true

我们终于同意接口支持真/完全inheritance。 丢失的inheritance特性(如覆盖,抽象/虚拟访问等)从接口中丢失,而不是从接口inheritance。 它仍然没有使这个概念变得简单明了,但它有助于理解Eric世界中真正发生的事情:-)

我find了第二部分问题的答案。 是的,只要接口声明为public,类就可以实现一个不同类的接口。