Какой самый элегантный способ использовать универсальный тип в качестве универсального параметра? - PullRequest
2 голосов
/ 05 августа 2010

Мне было интересно, есть ли более элегантный способ, чем этот пример, использовать универсальный тип в качестве универсального параметра:

public class Wrapper<TObject>
    where TObject : MyBaseClass
{
}

public class WrapperCollection<TWrapper, TObject> : Collection<TWrapper>
    where TWrapper : Wrapper<TObject>
    where TObject : MyBaseClass
{
}

На самом деле, если я хочу инициализировать экземпляр WrapperCollection, я бы сделал это следующим образом:

WrapperCollection<Wrapper<MyClass>, MyClass> collection = 
            new WrapperCollection<Wrapper<MyClass>, MyClass>();

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

WrapperCollection<Wrapper<MyClass>> collection = 
            new WrapperCollection<Wrapper<MyClass>>();

Итак, мой вопрос прост: есть ли способ сделать это или есть более элегантный дизайн для моего CollectionWrapper?

Спасибо.

1 Ответ

1 голос
/ 05 августа 2010

Если WrapperCollection<T> всегда содержит набор Wrapper<T> с, то вы можете сделать это:

public class WrapperCollection<TObject> : Collection<Wrapper<TObject>>
    where TObject : MyBaseClass
{
}

...

WrapperCollection<MyClass> collection = new WrapperCollection<MyClass>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...