2012-01-17 4 views
1

可能であれば、私はそのようなことをしたい。その後、HashSetに汎用を設定することはできますか?

internal sealed class BufferPool<T, K> : K<Buffer<T>> 
{ 
    public BufferPool() : base() {} 
    //etc... 
} 

など、このクラスを呼び出す:

BufferPool<byte, HashSet> buffers; 
buffers = new BufferPool<byte, HashSet>(bufferCapacity); 

または

BufferPool<byte, List> buffers; 
buffers = new BufferPool<byte, List>(bufferCapacity); 
+0

試しましたか?もしそうなら、何が起こったのですか? –

+0

あなたがここで何を求めているかは完全にはっきりしていません。あなたが作ろうとしていることの意図を記述できますか? –

+0

はい、私は試しましたが、それは仕事を得ることができません。 – Racooon

答えて

2

をあなたが(How to inherit from a generic parameter?を参照)型のパラメータを継承することはできません。何でき有用なタイプと、無地のコンストラクタであるように型パラメータを制約し、自分のクラスの内部でインスタンスをインスタンス化されて実行します。コンパイラは何を知っておく必要があるため

internal sealed class BufferPool<T, K> : IEnumerable<T> where K : IEnumerable<T>, new() 
{ 
    K _bufferImpl = new K(); 

    public BufferPool() : base() { } 
    //etc... 
} 
2

が動作しません。あなたのクラスがそのタイプの契約要件を満たしているかどうかを判断するために、クラスが継承/実装している型/インタフェース。これには、抽象メンバのオーバーライド、インターフェイスメンバの実装などが含まれます。

ここに型パラメータがある場合、契約は不明です。これは、コンパイラがサポートしていない状況です。