0

インターフェイスと抽象クラスによって提供される機能が必要だと思う状況があります。

シミュレーションで使用するモデルを作成しています。各モデルは、(変更できるように私の設計の) IModel インターフェイスを実装する C# クラスに含まれています。また、C# モデル クラスとシミュレーション環境の間のブリッジとして機能する c++ アンマネージ Win32 DLL も作成しました。モデル クラスは COM 経由で呼び出されるため、インターフェイスが必要です。

これらのモデル クラスは、シミュレーション環境とは関係なく、Web サービスを介して呼び出すことができる必要があるという新しい要件を受け取りました。現在、これらのモデルはかなり機密性が高く、クライアントは、クライアントによって構成され、サーバー上で実行されるように要求しています*。モデル クラスを抽象クラスから継承させ、サーバー上に Web サービス メソッドを作成すれば、これが可能になると考えました。

public AbstractModel executeModel(AbstractModel modelForExecution)

クライアントからモデル オブジェクトを受け取り、それを実行し、結果を入力します。

しかし、モデルには COM 実装用のインターフェイスが必要なため、抽象クラスは使用できません。

これらの 2 つの要件をどのように調整できますか? クラスにインターフェースを実装させ、そのクラスを抽象クラスから派生させることは可能だと言われましたが、その例は見つかりません。可能であれば、構文は何ですか? それができない場合、他に何をすればよいですか?

* モデル クラスは実際には古代の fortran 実行可能ファイルを呼び出すため、クラスのモデル構成は、モデルの動作に関する情報をあまり提供しません。

4

2 に答える 2

5
public abstract class Base{}
public interface IBase{}
public Something: Base, IBase{} 
// the interface needs to go after the base class
于 2009-03-19T05:40:21.503 に答える
1

あなたの抽象クラスにインターフェースを実装させようとします(そしてメソッドを抽象として持たせます)。次に、各実装は抽象クラスをサブクラス化します。私はそれがうまくいくと思います。

public interface IModel {
  void doSomething();
}

public abstract class AbstractModel : IModel {
  public abstract void doSomething();
}

public class MyModel : AbstractModel {
  public void doSomething() {
    // code goes here
  }
}

実装メソッドで「overrides」キーワードを使用する必要がある場合があります (コンパイラが通知します)。

于 2009-03-19T05:47:34.650 に答える