2

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

新しいクラスを書いているとしましょう。それPooledQueue<T>を と呼びましょう。そのコンストラクターで、 interface を実装する引数を受け入れたいとしますIResourcePool<T>IResourcePool<T>ここでの考え方は、 (インターフェイスの背後にある全体的な考え方ですよね?)のプロパティ/メソッドが得られる限り、基になるプール オブジェクトを使用しても問題ないということです。

しかし、実装されていない (そしてソース コードを変更できない) ことを除いて、のすべての機能を提供する利用可能なクラスが既にある場合、実装を強制する方法はありますか?IResourcePool<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 にリンクする関連付けテーブルを使用します。それは理にかなっていますか?

4

1 に答える 1

2

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

透明なRealProxyLinFUなどのサードパーティ ライブラリを使用するなどの方法があります。これにより、このようなものをシミュレートできますが、ラッパー クラスを作成するよりもコストがかかります。

実際、コードがクリーンなままになるように、ラッパーを作成するオーバーロードコンストラクターを作成できます...

于 2009-10-27T19:15:36.167 に答える