1

C# で許可されていない多重継承に問題があります。

次のシナリオ:

class MasterCamera { ... }

class CameraFromManufacturerA : MasterCamera { ... }

class CameraFromManufacturerB : MasterCamera { ... }

class CameraFromManufacturerC : MasterCamera { ... }

MasterCameraStartCamera()、などの機能を提供しますConnectCamera()。私のメイン コードでは、A、B、または C のカメラが接続されているかどうかMasterCamera mCamera = CameraSelector.GetCamera(); をチェックするオブジェクトを使用し、そのオブジェクトを返します (例: )CameraSelectorCameraFromManufacturerA

これは理論的には問題なく動作しますが、これらのカメラの API の 1 つは WindowsMessageCallback ( WndProc) を使用する必要があるため、そのカメラのみを含める必要があります。Windows.System.Forms.Form

C# では多重継承が許可されておらず、フォームにはインターフェイス クラスがないため、MasterCamera継承元にする必要があります。Windows.System.Forms.Form

私はそれをしたくないので、どうすればそれを回避できますか?

4

4 に答える 4

2

MasterCamera { ... } を Class として使用するのではなく、次のように Interface として使用する必要があります。

パブリック インターフェイス MasterCamera { ... }

そしてそれはうまくいかなければなりません。

于 2012-09-12T09:10:40.680 に答える
2

これは継承に関する一般的な問題であり、GoF が「継承より構成を優先する」状態になっているのはこのためです。

Strategyパターンを使用できます。のさまざまなタイプを派生MasterCameraさせる代わりに、さまざまなタイプの を派生させICameraFunctionality、そのインスタンスのオブジェクトをMasterCamera(というよりは単にCamera) クラスに格納します。

このように、MasterCamera は一般的な作業を行うだけで、そのICameraFunctionalityインスタンスを呼び出して特定の作業を実行します。

于 2012-09-12T09:12:10.757 に答える
1

コードの依存関係を単純ににするとどうなるでしょうか。オブジェクトFormをオーバーライドWindowsMessageCallbackしてホストできるクラスを作成します。これは、必要な子クラスになります。MasterCameraCamera

于 2012-09-12T09:08:24.060 に答える
1

あなたはしようとしていInheritanceます。も試してみてくださいComposition

に含めることはできませんCameraForm?

于 2012-09-12T09:10:54.250 に答える