2011-06-21 11 views
4
class UDPClient 
{ 
} 

class LargeSimulator 
{ 
} 

class RemoteLargeSimulatorClient : UDPClient, LargeSimulator 
{ 
} 

複数の継承が必要な場合は、デザインがオフになっています。C#で複数の継承機能が必要です。私は間違って何をしていますか?

これをC#で何と実装すればよいでしょうか?

+0

が見えます。 – bzlm

+0

編集:私は実装継承を継承しないインターフェイスを継承したい...はい、私はインターフェイスについて知っています..私はちょうどC#がコピー/ペーストの束であるかどうか疑問に思っています...または1ソースからコードを再利用する方法はありますか? – jaybny

+0

RemoteLargeSimulatorClient *が* UDPClientであることを確認してください。たぶんあなたは構図を代わりに使うべきでしょう。 – empi

答えて

5

することはできC#での単一の基本クラスからのみ固有。ただし、必要な数のインターフェイスを実装できます。この事実をExtension Methodsの出現と組み合わせると、(ハックな)回避策があります。

4

C#では単一の継承しかできませんが、必要な数のインターフェイスから継承できます。

継承するクラスを1つだけ選択し、残りのインターフェイスを作成するか、すべてのインターフェイスにすることができます。

あなたはまた、そうのようなあなたの継承をチェーンできます

class UDPClient 
{ 
} 

class LargeSimulator : UDPClient 
{ 
} 

class RemoteLargeSimulatorClient : LargeSimulator 
{ 
} 
1

は、あなたがそれを望むように多重継承を取得するには、あなたのUDPClientとLargeSimulator interfaceの代わりclassを作成する必要があります。

クラスの多重継承は、C#でことはできません

0

短い答え:C#では複数の継承が許可されていません。インターフェイス上で読む:http://msdn.microsoft.com/en-us/library/ms173156.aspx

もう少し答え:戦略パターンなどのように、他のデザインパターンがあなたに合っているかもしれません。コードの再利用を実現する唯一の方法は、継承だけではありません。

0

残念ながら、メンバーにはラッパーメソッドを記述する必要があります。 C#での多重継承は存在しません。ただし、複数のインタフェースを実装することはできます。

+1

LargeSimulatorは(外部のlibからの)100,000のイベントとメソッドを持っています... UDPClientは低レベルのネットワークを持っています。私は1つを選択して貼り付けをする必要がありますか?実際の言葉のためには馬鹿げているようです。 – jaybny

+0

ちょうどこれを使用しないでください。あなたは、両方に結合するオブジェクトを必要としないようです。あまりにも大きなものに参加するには、過剰な殺人のようだ。たぶん、いくつかのデザインパターンがゲームに欠けているかもしれません。 –

+0

@jaybny、あなたがしようとしていることについてもっと詳しく話したら、私たちはあなたをより良く助けてくれるかもしれません。ソリッドとコンポジションのようなサウンドは、C#が「コピー貼り付け」である方法について、インターフェイス、継承、泣き言よりも優れています。 :) – bzlm

0

多重継承の可能な代替案の1つは、ミックスインです。残念ながら、C#にはこれらのオプションはありませんが、回避策が可能です。ほとんどの場合、拡張メソッドの使用に依存しています(以前の回答者が示唆したように)。以下のリンクを参照してください:あなたのデザインがオフになっているよう

http://mortslikeus.blogspot.com/2008/01/emulating-mixins-with-c.html http://www.zorched.net/2008/01/03/implementing-mixins-with-c-extension-methods/ http://colinmackay.co.uk/blog/2008/02/24/mixins-in-c-30/

関連する問題