创建一个带有基类的接口,而派生类包含它们自己的实现

本文关键字:派生 包含它 实现 自己的 接口 一个 基类 创建 | 更新日期: 2023-09-27 18:25:45

这是我的代码

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; }
}

问题是IDevice中的返回类型是InternalDevice1(更通用)而我需要SpecificDevice(它仍在从InternalDevice中获取)我在尝试使用这个时遇到了一个问题:

IDevice = new MyWholeDevice ...

创建一个带有基类的接口,而派生类包含它们自己的实现

您应该使IDevice generic

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

然后你的课程会是这样的:

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