2010-08-05 6 views
2

Je me demandais s'il y avait une façon plus élégante que cet exemple pour utiliser le type générique comme paramètre générique:Quelle est la manière la plus élégante d'utiliser le type générique comme paramètre générique?

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

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

En fait, si je veux initialiser une instance de WrapperCollection je voudrais le faire comme ceci:

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

Et comme je ne suis pas vraiment satisfait, ce serait serait vraiment élégante d'être capable d'initialiser comme ça:

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

Donc, ma question est simple: existe-t-il un moyen de le faire ou existe-t-il un design plus élégant à utiliser pour mon CollectionWrapper?

Merci.

Répondre

1

Si WrapperCollection<T>toujours contient une collection de Wrapper<T> s, vous pouvez le faire:

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

... 

WrapperCollection<MyClass> collection = new WrapperCollection<MyClass>(); 
+0

On dirait que 'TWrapper' peut aussi être une classe dérivée de' Wrapper'. En C++, c'est facile (utilisez typedef), pas trop en C#. –

+0

@Ben: Ah oui, vous avez peut-être raison ... –

+0

Très intéressant d'une manière syntaxique mais pas vraiment pertinent de l'objet réel. En faisant cela, l'utilisateur devrait créer une collection de TObject, ce qui n'est pas le cas. Je vous remercie. – Ucodia

Questions connexes