PIC*_*ain 123 c# inheritance components interface class
我想知道一个类是否可以从类和接口继承.下面的示例代码不起作用,但我认为它传达了我想要做的事情.我想这样做的原因是因为我公司生产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;
}
}
Run Code Online (Sandbox Code Playgroud)
Meh*_*ari 234
是.尝试:
class USBDevice : GenericDevice, IOurDevice
Run Code Online (Sandbox Code Playgroud)
注意:基类应位于接口名称列表之前.
当然,您仍然需要实现接口定义的所有成员.但是,如果基类包含与接口成员匹配的成员,则基类成员可以作为接口成员的实现,并且不需要再次手动实现它.
Dav*_*d M 20
不,不完全是.但它可以从类继承并实现一个或多个接口.
在讨论这样的概念时,明确的术语很重要.你会看到的其中一件事,标志着Jon Skeet的作品,例如,无论是在这里还是在印刷品中,都是因为他总是精确地描述事物的方式.
STW*_*STW 19
与问题无关(Mehrdad的答案应该让你去),我希望这不会被视为挑剔:类不继承接口,它们实现它们.
.NET不支持多重继承,因此保持条款直接有助于沟通.一个类可以从一个超类继承,并且可以实现任意数量的接口.
回应Eric的评论......我和另一个开发人员讨论了接口是否"继承","实现","需要"或"带来"接口的声明如下:
public interface ITwo : IOne
Run Code Online (Sandbox Code Playgroud)
技术上的答案是ITwo
继承IOne
的原因有以下几点:
ITwo
工具 IOne
是错误的ITwo
继承IOne
方法,如果MethodOne()
存在,IOne
那么它也可以从中访问ITwo
.ie:((ITwo)someObject).MethodOne())
有效,即使ITwo
没有明确包含定义MethodOne()
typeof(IOne).IsAssignableFrom(typeof(ITwo))
回报true
我们最终同意接口支持true/full继承.接口缺少缺少的继承功能(例如覆盖,抽象/虚拟访问器等),而不是接口继承.它仍然没有使概念变得简单或清晰,但它有助于理解Eric的世界中真正发生的事情:-)