2

2 つの異なる基本クラスの機能を新しいクラスに結合しようとしていますが、役に立ちません。クラス A と B があり、B は異なる機能を持つ A の子孫であり (つまり、実行時に A の代わりとして使用することはできません)、クラス C が必要で、A と B を組み合わせて両方を使用し、 C のユーザーへのユニークなインターフェイス。どうすればこれを達成できますか? C# では複数の継承ができず、インターフェイスが適合しないようです。それで、なにかお手伝いできますか?

4

5 に答える 5

14

あなたのデザインは壊れています。

Bは、異なる機能を持つAの子孫です(つまり、実行時にAの代わりに使用することはできません)

その状況は、継承の誤用です。それを実行したい場合は、代わりにAとBの両方が別々に実装する構成または共通のインターフェースを使用する必要があります。

于 2010-02-14T14:22:15.463 に答える
1

明示的なインターフェースの実装を検討してください。

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()
  {
    //,,
  }
}
于 2010-02-14T14:25:24.767 に答える
0

Bあなたはそれが派生していると言いますが、異なっており、 ;Aとして使用することはできません。Aこれは、継承の目的に完全に反します。何を達成しようとしていますか?とにかく、継承ではなく、作曲を使用する必要があるように聞こえます。またはでC定義されたインターフェースを公開しない場合は、どちらからも継承しないでください。AB

于 2010-02-14T14:22:46.487 に答える
0

このようなアクションを検討する必要があるという事実から、クラス構造のリファクタリングを検討する必要があるかもしれないと思います。

しかし、当面の問題を解決するには、2つのクラスをインスタンス化して(継承関係にあるという事実を無視して)、必要な順序でメソッドを呼び出してみませんか?CをAとBのファサードパターンと考えてください。

于 2010-02-14T14:26:21.377 に答える
0

問題が解決しました。現在 System.Reflection を使用しています。

于 2010-02-16T12:54:15.580 に答える