0

それは実際には設計上の問題です。
インターフェイスaと抽象メソッドm1m2を持つクラスaaがあり、 aから継承しているとしましょう。

public interface a
{
  string m1();
  string m2();
}

public abstract class aa:a
{
  public abstract string m1();
  public abstract string m2();
}  

また、別のインターフェイスbと、それを継承するクラスbbがあります。

public interface b
{
  string n1();
  string n2();
}

public abstract class bb:b
{
  public abstract string n1();
  public abstract string n2();
}  

そして、 aaを継承するクラスにクラスbbのメソッドを実装するように強制したい( m1およびm2を実装する必要があるのと同じ)

それを行う正しい方法は何ですか?

public abstract class aa:a
{
  public abstract string m1();
  public abstract string m2();
  public abstract bb()?? 
  or public abstract bb.n1()???
}
4

1 に答える 1

1

次のいずれかを実行できます。 bb クラスから aa を継承します。b インターフェイスを aa クラスに 実装します。b インターフェイスを aa クラスに明示的に実装します。

// Inherit aa from bb class
public abstract class aa:a, bb {
  public abstract string m1();
  public abstract string m2();

  // public abstract string n1(); // <- From bb class
  // public abstract string n2(); // <- From bb class
}

// Implement b interface in aa class
public abstract class aa:a, b {
  public abstract string m1();
  public abstract string m2();

  public abstract string n1(); // <- From b interface
  public abstract string n2(); // <- From b interface
}

// Implement b interface in aa class explicitly
public abstract class aa:a, b {
  public abstract string m1();
  public abstract string m2();

  protected abstract string core_n1(); // <- Put (override) b interface implementation here
  protected abstract string core_n2(); // <- Put (override) b interface implementation here

  // Can't be abstract itself but can call an abstract method
  b.string n1() { // <- explicit implementation, mo public or other modifier here!
    return core_n1();
  }
  // Can't be abstract itself but can call an abstract method
  b.string n2() { // <- explicit implementation, mo public or other modifier here!
    return core_n2();
  }
}
于 2013-09-02T08:14:27.607 に答える