estoy tratando de hacer lo siguiente:Asignación dinámica de clase derivada en C#
public abstract BaseClass {
public virtual void ReceiveEvent(Event evt)
{
ProcessEvent(evt as dynamic);
}
private void ProcessEvent(object evt)
{
LogManager.Log(@"Received an event that is not being processed!
Dispatch fallback");
}
}
public DerivedClass: BaseClass {
private void ProcessEvent(SpecificEvent evt)
{
LogManager.Log("Processing Event");
}
}
SpecificEvents golpean el método de respaldo en lugar de la de la clase derivada. Uso el despacho dinámico dentro de la misma clase todo el tiempo y lo encuentro realmente útil/limpio. ¿No funcionará con las clases derivadas como se ilustra en el ejemplo anterior?
EDITAR: Parece haber algo de confusión en las respuestas. Básicamente yo uso el siguiente diseño todo el tiempo:
public class SomeClass{
public void DoSomethingDispatcher(SomeObject obj)
{
ProcessObject(obj as dynamic);
}
private void DoSomething(SomeObjectType1 obj)
{
}
private void DoSomething(SomeObjectType2 obj)
{
}
private void DoSomething(SomeObjectType3 obj)
{
}
private void DoSomething(object obj) //fallback
{
}
}
funciona muy bien para cuando no conoce el tipo exacto de antemano y que no quiero utilizar una sentencia switch gran. Me pregunto si esto se puede implementar con la herencia, donde la clase base tiene el método alternativo y la clase derivada contiene todos los métodos más específicos.
Supongo que se llama al ReceiveEvent en BaseClass en lugar de DerivedClass. ¿Has intentado anular el ReceiveEvent en DerivedClass? Es virtual, por lo que puede hacer 'public override void ReceiveEvent (Event evt)' Aquí hay más información sobre métodos virtuales: http://msdn.microsoft.com/en-us/library/aa645767%28v=vs.71%29. aspx – Davio