usar usando tipos tipo porque objeto interfaces implementacion genericos generico genericas crear c# generics interface generic-list

c# - usando - tipos de genericos



Lista genérica de interfaces genéricas no permitidas, ¿algún enfoque alternativo? (3)

Estoy tratando de encontrar la forma correcta de usar una lista genérica de interfaces genéricas como variable.

Aquí hay un ejemplo. Probablemente no sea el mejor, pero con suerte obtendrá el punto:

public interface IPrimitive<T> { T Value { get; } }

y luego en otra clase, quiero poder declarar una variable que contiene una lista de objetos que implementan IPrimitive<T> para T arbitraria.

// I know this line will not compile because I do not define T List<IPrimitive<T>> primitives = new List<IPrimitives<T>>; primitives.Add(new Star()); // Assuming Star implements IPrimitive<X> primitives.Add(new Sun()); // Assuming Sun implements IPrimitive<Y>

Tenga en cuenta que la T en IPrimitive<T> podría ser diferente para cada entrada en la lista.

¿Alguna idea sobre cómo podría establecer una relación de este tipo? ¿Aproximaciones alternativas?


Usted dice que no funcionará porque no define T Así que definanlo:

public class Holder<T> { public List<IPrimitive<T>> Primitives {get;set;} }


John tiene razón.

¿También puedo sugerir (si está utilizando C # 4) que haga que su interfaz sea covariante?

public interface IPrimitive<out T> { T Value { get; } }

Esto podría ahorrarle algunos problemas más adelante cuando necesite eliminar cosas de la lista.


public interface IPrimitive { } public interface IPrimitive<T> : IPrimitive { T Value { get; } } public class Star : IPrimitive<T> //must declare T here { }

Entonces deberías poder tener

List<IPrimitive> primitives = new List<IPrimitive>; primitives.Add(new Star()); // Assuming Star implements IPrimitive primitives.Add(new Sun()); // Assuming Sun implements IPrimitive