Tengo un contenedor clase padre que puede contener cualquier tipo de nodo, donde nodo es una subclase de una clase genérica específica a los padres, así:matriz genérica de niño genérico C#
public class ContainerBase<NodeType, ObjectType>
where NodeType : NodeBase<ObjectType> where ObjectType : ObjectBase {
}
public abstract class NodeBase<T> where T : ObjectBase {
ContainerBase<NodeBase<T>, T> container;
public NodeBase(ContainerBase<NodeBase<T>, T> owner) {
container = owner;
}
}
Lo quiero hacer es crear subclases concretas para simplificar, que implementan tipos de objetos estándar:
public class ContainerNormal : ContainerBase<NodeNormal, ObjectNormal> {
}
public class NodeNormal : NodeBase<ObjectNormal> {
//This doesn't work
public NodeNormal(ContainerNormal owner) : base(owner) { }
}
que un poco entender por qué la llamada al constructor base no funciona. Está intentando convertir un ContainerNormal
a un ContainerBase<NodeBase<ObjectNormal>, ObjectNormal>
que realmente no funciona.
Entonces, ¿qué patrón de diseño me falta para que esto funcione, verdad? ¿O simplemente tengo que tomar un ContainerBase<NodeBase<ObjectNormal>,ObjectNormal>
en el constructor, aunque no necesariamente sea un objeto ContainerNormal
?
Parece que realmente puede funcionar, aunque acabará saturando el espacio de nombres un poco ... –
Después de la inspección, parece tener el mismo problema que la respuesta de Can Gencer, en ese intento de obtener un NodeNormal de un ContainerNormal en su lugar devuelve un Nodo, que es casi lo mismo, pero no del todo. –