2012-09-29 12 views
5

Tengo el siguiente:cómo pasar un comodín en C#

public class Foo<T> : Goo 
    where T: SomeClass<?>, new() 

lo sé? no es un comodín real en C#, sin embargo, ¿cómo escribirías esto correctamente en C# para que SomeClass pueda tomar cualquier clase como argumento? Intenté usar el objeto, pero luego aparece un error "... no hay conversión de referencia implícita de ..."

Gracias!

Respuesta

6

Debe especificar el segundo argumento de tipo (es decir, Y en mi ejemplo), tenga en cuenta que Y podría ser cualquier cosa, ya que no hay restricciones, incluso lo mismo que T.

public class Foo<T, Y> : Goo 
    where T: SomeClass<Y>, new() 

Otra opción es especificar sólo segunda clase si sólo se necesita utilizar SomeClass<Y> en su clase genérica, que no tendrá nueva restricción() porque compilador sabe de antemano que SomeClass<T> tienen constructor por defecto:

public class Foo<Y> : Goo{ 
    public SomeClass<Y> Value; 

    public void Setup() { Value = new SomeClass<Y>(); } 
} 
Cuestiones relacionadas