2 つの異なる基本クラスの機能を新しいクラスに結合しようとしていますが、役に立ちません。クラス A と B があり、B は異なる機能を持つ A の子孫であり (つまり、実行時に A の代わりとして使用することはできません)、クラス C が必要で、A と B を組み合わせて両方を使用し、 C のユーザーへのユニークなインターフェイス。どうすればこれを達成できますか? C# では複数の継承ができず、インターフェイスが適合しないようです。それで、なにかお手伝いできますか?
5 に答える
あなたのデザインは壊れています。
Bは、異なる機能を持つAの子孫です(つまり、実行時にAの代わりに使用することはできません)
その状況は、継承の誤用です。それを実行したい場合は、代わりにAとBの両方が別々に実装する構成または共通のインターフェースを使用する必要があります。
明示的なインターフェースの実装を検討してください。
http://msdn.microsoft.com/en-us/library/ms173157.aspx
public interface IFriendly
{
void Greet();
}
public interface IEnemy
{
void Greet();
}
public class SomeGuy : IFriendly, IEnemy
{
//default Greeting
public void Greet()
{
//...
}
//greeting when using an IFriendly reference
void IFriendly.Greet()
{
//,,
}
//greeting when using an IEnemy reference
void IEnemy.Greet()
{
//,,
}
}
B
あなたはそれが派生していると言いますが、異なっており、 ;A
として使用することはできません。A
これは、継承の目的に完全に反します。何を達成しようとしていますか?とにかく、継承ではなく、作曲を使用する必要があるように聞こえます。またはでC
定義されたインターフェースを公開しない場合は、どちらからも継承しないでください。A
B
このようなアクションを検討する必要があるという事実から、クラス構造のリファクタリングを検討する必要があるかもしれないと思います。
しかし、当面の問題を解決するには、2つのクラスをインスタンス化して(継承関係にあるという事実を無視して)、必要な順序でメソッドを呼び出してみませんか?CをAとBのファサードパターンと考えてください。
問題が解決しました。現在 System.Reflection を使用しています。