我想知道一个类是否可以从类和接口继承。 下面的示例代码不起作用,但我认为它传达了我想要做的事情。 我想这样做的原因是因为我公司生产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;
}
}
答案 0 :(得分:231)
是。尝试:
class USBDevice : GenericDevice, IOurDevice
注意:基类应位于接口名称列表之前。
当然,您仍然需要实现接口定义的所有成员。但是,如果基类包含与接口成员匹配的成员,则基类成员可以作为接口成员的实现,并且您不需要再次手动实现它。
答案 1 :(得分:20)
不,不完全是。但它可以从一个类继承而实现一个或多个接口。
在讨论这样的概念时,明确的术语很重要。你会看到的其中一件事,标志着Jon Skeet的写作,例如,无论是在这里还是在印刷品中,都是他在描述事物的方式上总是精确的。
答案 2 :(得分:19)
与问题无关(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
我们最终同意接口支持true / full继承。接口缺少缺少的继承功能(例如覆盖,抽象/虚拟访问器等),而不是接口继承。它仍然不会使概念变得简单或清晰,但它有助于理解Eric的世界中真正发生的事情: - )
答案 3 :(得分:1)
我找到了问题第二部分的答案。 是的,只要接口被声明为public,类就可以实现一个不同类的接口。