我在C#
中遇到了非允许的多重继承问题以下情景:
class MasterCamera { ... }
class CameraFromManufacturerA : MasterCamera { ... }
class CameraFromManufacturerB : MasterCamera { ... }
class CameraFromManufacturerC : MasterCamera { ... }
MasterCamera
提供了StartCamera()
,ConnectCamera()
等功能。
在我的主代码中,我使用了一个对象MasterCamera mCamera = CameraSelector.GetCamera();
CameraSelector
检查A,B或C中的摄像头是否已连接,并返回该对象(例如CameraFromManufacturerA
)
这在理论上完全正常,但是其中一个相机的API需要使用WindowsMessageCallback(WndProc
),因此我只需要为该相机添加Windows.System.Forms.Form
由于C#不允许多重继承,并且afaik Form没有接口类,我必须从MasterCamera
继承Windows.System.Forms.Form
我不想那样,那我怎么能绕过那个呢?
答案 0 :(得分:2)
您不应将MasterCamera {...}用作类,而是将其用作接口 像:
public interface MasterCamera {...}
它必须有效。
答案 1 :(得分:2)
这是继承的常见问题,这就是为什么GoF状态“赞成组合而非继承”
您可以使用Strategy模式。而不是派生不同类型的MasterCamera
,而是派生不同类型的ICameraFunctionality
,并将该实例的对象存储在MasterCamera
(或更确切地说只是Camera
)类中。< / p>
这样MasterCamera就可以完成常规工作了,但是调用它的ICameraFunctionality
实例来执行特定的工作。
答案 2 :(得分:1)
如果您只是在代码中反转依赖项,该怎么办?
创建一个覆盖Form
的{{1}}类,并且能够托管WindowsMessageCallback
对象,这将是您需要的子MasterCamera
类。
答案 3 :(得分:1)
您正在尝试Inheritance
。试试Composition
。
Camera
Form