C#中的继承问题

时间:2012-09-12 09:04:48

标签: c# multiple-inheritance

我在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

我不想那样,那我怎么能绕过那个呢?

4 个答案:

答案 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