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

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

为了补充这个问题: 如果 GenericDevice 在不同的项目中,我可以把 IOurDevice 接口放在该项目中,然后让 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;
}
}
159585 次浏览

是的,试试:

class USBDevice : GenericDevice, IOurDevice

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

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

不,不完全是。但是它可以从一个类和 执行继承一个或多个接口。

在讨论这样的概念时,清晰的术语非常重要。例如,你会看到 Jon Skeet 的作品中有一点,无论是在这里还是在出版物中,他总是精确地描述事物。

与这个问题无关(Mehrdad 的回答应该能让你继续下去) ,我希望这不是吹毛求疵: 类不是 继承接口,而是 执行接口。

.NET 不支持多重继承,因此保持术语的直接有助于通信。一个类可以从一个超类继承,并且可以实现任意多个接口。


作为对 Eric 评论的回应... ... 我和另一个开发人员讨论了接口是否“继承”、“实现”、“需要”或“带来”接口,并声明如下:

public interface ITwo : IOne

技术上的答案是,ITwo确实继承了 IOne,原因有以下几点:

  • 接口 永远不会有一个实现,因此认为 ITwo 工具 IOne是完全错误的
  • ITwo继承 IOne方法,如果 MethodOne()存在于 IOne上,那么它也可以从 ITwo访问。即: ((ITwo)someObject).MethodOne())是有效的,即使 ITwo没有显式地包含 MethodOne()的定义
  • ... 因为运行时是这么说的! typeof(IOne).IsAssignableFrom(typeof(ITwo))返回 true

我们最终同意接口支持真继承/完全继承。缺少的继承特性(例如重写、抽象/虚拟访问器等)是接口中缺少的,而不是接口继承中缺少的。它仍然没有使这个概念变得简单或清晰,但它有助于理解在埃里克的世界里到底发生了什么: -)

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