简体   繁体   English

创建具有基类的接口,而派生类包含其自己的实现

[英]create an interface with base classes while derived classes contain their own implementation

This is my code 这是我的代码

class InternalDevice1
{
}

class InternalDevice2
{
}

class SpecificDevice1 : InternalDevice1
{
}

class SpecificDevice2 : InternalDevice2
{
}

class SpecificDevice3 : InternalDevice1
{
}

class SpecificDevice4 : InternalDevice2
{
}

class MyWholeDevice1 : IDevice
{
   MyWholeDevice(SpecificDevice1 device1, SpecificDevice2 device2) { }
   SpecificDevice1 Device { get; }   
}

class MyWholeDevice2 : IDevice
{
   MyWholeDevice(SpecificDevice3 device1, SpecificDevice4 device2) { }
   SpecificDevice3 Device { get; }  
}


interface IDevice
{
   InternalDevice1 Device { get; }
}

The problem is that the return type in IDevice is InternalDevice1 (which is more general) while I need the SpecificDevice (which is still dervied from InternalDevice) I'm encountering a problem when trying to use this: 问题是IDevice中的返回类型是InternalDevice1(更通用),而我需要SpecificDevice(仍从InternalDevice派生)时,我在尝试使用此方法时遇到问题:

IDevice = new MyWholeDevice ...

You should make your IDevice generic 您应该使您的IDevice generic

interface IDevice<TDevice>
   where TDevice : InternalDevice1
{
   TDevice Device { get; }
}

Then your classes will look like this: 然后您的课程将如下所示:

class MyWholeDevice1 : IDevice<SpecificDevice1>
{
   MyWholeDevice(SpecificDevice1 device1, SpecificDevice2 device2) { }
   SpecificDevice1 Device { get; }   
}

class MyWholeDevice2 : IDevice<SpecificDevice3>
{
   MyWholeDevice(SpecificDevice3 device1, SpecificDevice4 device2) { }
   SpecificDevice3 Device { get; }  
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM