2012-01-17 5 views
1

가능한 경우 그와 비슷한 것을하고 싶습니다. HashSet에 대해 Generic을 설정할 수 있습니까?

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

가 작동하지 않습니다 귀하의 클래스가 해당 유형의 계약 요구 사항을 충족시키는 지 결정하기 위해 클래스가 상속/구현하는 유형/인터페이스. 여기에는 추상 멤버 무시, 인터페이스 멤버 구현 등이 포함됩니다.

형식 매개 변수가있는 경우 계약을 알 수 없습니다. 이것은 컴파일러가 지원하지 않는 상황입니다.

관련 문제