2012-01-17 108 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

你试过了吗?如果是这样,发生了什么? – 2012-01-17 18:09:49

+0

这里并不完全清楚你在问什么;你能描述一下你想要构建什么的意图吗? – 2012-01-17 18:10:00

+0

是的,我已经尝试过,但不能得到它的工作。 – Racooon 2012-01-17 18:11:23

回答

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

这是行不通的,因为编译器需要知道什么您的类继承/实现的类型/接口,以确定您的类是否满足该类型的合同要求。这包括覆盖抽象成员,实现接口成员等。

当您只有一个类型参数时,合同是未知的。这是编译器不支持的情况。

相关问题