既存の(固定)クラスに新しいインターフェイスを実装させることはできますか?

StackOverflow https://stackoverflow.com/questions/1632970

  •  06-07-2019
  •  | 
  •  

質問

私はすでに人々の答えを知っていると感じていますが、とにかくここに行きます:

新しいクラスを書いているとしましょう。それをPooledQueue<T>と呼びましょう。このコンストラクターでは、インターフェイスIResourcePool<T>を実装する引数を受け取ります。ここでのアイデアは、<=>のプロパティ/メソッドを提供する限り、基礎となるプールオブジェクトを使用しても問題ないということです(ご存知のとおり、インターフェイスの背後にあるアイデア全体です)。

しかし、実装 <=>を行わないことを除いて、<=>のすべての機能を提供する既にクラスがある場合ソースコードを変更します)、実装を強制する方法はありますか?

人々が答えると期待しているのは、必要なインターフェイスを実装する既存のクラスのラッパーを作成するだけだということです。しかし、私はこれをできるようにしたいだけです:

// GetDataPool returns an object of type Pool<Data> that I can't modify
var q = new PooledQueue<Data>(GetDataPool());

これの代わりに:

var q = new PooledQueue<Data>(new PoolWrapper<Data>(GetDataPool()));

クラスのインターフェイスの実装をクラス定義とは別に定義できるとしたら、本当に便利だと思います。適切に設計されたデータベースが構造化される方法の並べ替え-エンティティを他のテーブルのIDとリンクする関連付けテーブルを使用します。それは理にかなっていますか?

役に立ちましたか?

解決

そのままでは、クラスを継承せずにクラスのインターフェイスを強制することはできません。

透明な RealProxy または LinFU などのサードパーティライブラリ。このようなものをシミュレートしますが、ラッパークラスを作成するよりもコストが高くなります。

実際には、ラッパーを作成するオーバーロードコンストラクターを作成して、コードをきれいに保つことができます...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top