Por favor, eche un vistazo a la estructura de mi clase. Creo que me gustaría divertirme más con la herencia de lo que es posible.C# - herencia avanzada
En primer lugar hay una clase base abstracta:
public abstract class PolicyDetailed
{
internal abstract DataContainer GetActiveAsset();
}
A continuación hay otra clase abstracta, que es genérica:
public abstract class PolicyDetailed<T> : PolicyDetailed where T : DataContainer
{
internal new abstract T GetActiveAsset();
}
Por último hay una clase política específica. AccidentContainer hereda de DataContainer:
public class PolicyAccident : PolicyDetailed<AccidentContainer>
{
internal override AccidentContainer GetActiveAsset()
{
return null;
}
}
Durante la compilación me sale el siguiente error:
'PolicyAccident' does not implement inherited abstract member 'PolicyDetailed.GetActiveAsset()'
No estoy seguro de lo que los modificadores que debe utilizar para conseguir que funcione. Quizás también deba escribir lo que me gustaría lograr: tengo una colección de objetos de política de diferente tipo (por ejemplo, PolicyAccident, PolicyTravel, etc.) que heredan de PolicyDetailed con diferentes tipos de DataContainer (AccidentContainer, TravelContainer, etc.). Me gustaría llamar al método "GetActiveAsset" en cada uno de ellos sin conocer su tipo específico y hacer referencia a ellos a través de PolicyDetailed. Al mismo tiempo, me gustaría que cada clase devuelva su subclase DataContainer específica. ¿Es eso posible?
¿Es realmente importante para usted declarar que los tipos de contenedor específicos devuelven sus tipos de política específicos? ¡Usted dice que quiere hacer referencia a los objetos devueltos como PolicyDetailed, y de ese modo pierde la información específica de todos modos! (Recuerde que AccidentContainer _IS_ a DataContainer, y AccidentContainer pueden ser devueltos por un método con tipo de retorno DataContainer sin cambiar ninguna firma) – olagjo
Lo necesito en otras partes del código, donde hago referencia al tipo específico de política y uso su contenedor especial. Podría considerar usar dos métodos: uno devolvería un objeto DataContainer, el segundo podría devolver un contenedor específico (pero se siente un poco torpe :() – Rummy