2013-09-09 4 views
9

В принципе, я хочу написать обертку для всех ICollection <> типов. Позволяет называть его DelayedAddCollection. Он должен принимать любые ICollection как свои.Как создать общий класс, который принимает в качестве своего общего типа общий класс?

Кроме того, мне нужен доступ к этому типу общего типа ICollection, поскольку методу Add необходимо ограничить его параметр этим типом.

Синтаксис Я предположил бы, что бы выглядеть примерно так ...

public DelayedAddConnection<T>: where T:ICollection<U> { 
    .... 

    public void Add(U element){ 
    ... 
    } 
} 

Каков реальный правильный синтаксис, чтобы сделать это?

ответ

17

Вам нужно добавить еще один общий параметр типа:

public class DelayedAddConnection<T, U> where T : ICollection<U> 
{ 

} 
+0

Tank you, это заводило меня орехами :) – user430788

+3

@ user430788 - Есть ли причина, по которой вам нужен тип для коллекции, а не просто 'ICollection '? – Lee

+0

Мне нужен был тип коллекции, потому что я создавал его внутри. Но, реализовав его таким образом, я думаю, что могу передать его в конструкторе, и он будет чище, поэтому спасибо ... – user430788

0

Так, в будущее окончательной, чистейшую версию этой идеи я реализовал благодаря всем предложениям и замечанию был такой:

public class DelayedUpdateCollection<U>: ICollection<U> 
{ 

    ICollection<U> collection; 


    public DelayedUpdateCollection(ICollection<U> coll){ 
     collection = coll; 
    } 

    ... 
Смежные вопросы