sto cercando di fare quanto segue:dinamica spedizione verso classe derivata in 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 colpito il metodo di ripiego al posto di quello della classe derivata. Uso la spedizione dinamica all'interno della stessa classe per tutto il tempo e la trovo davvero utile/pulita. Non funzionerà con le classi derivate come illustrato nell'esempio sopra?
MODIFICA: Sembra esserci un po 'di confusione nelle risposte. Fondamentalmente io uso il seguente disegno per tutto il tempo:
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
{
}
}
funziona alla grande per quando non si conosce il tipo esatto in anticipo e non si desidera utilizzare una grande dichiarazione interruttore. Mi chiedo solo se questo può essere implementato con ereditarietà in cui la classe base detiene il metodo di fallback e la classe derivata contiene tutti i metodi più specifici.
La mia ipotesi è che ReceiveEvent venga chiamato sulla BaseClass anziché su DerivedClass. Hai provato a sovrascrivere ReceiveEvent su DerivedClass? È virtuale, quindi puoi fare 'public override void ReceiveEvent (Event evt)' Ecco alcune ulteriori informazioni sui metodi Virtual: http://msdn.microsoft.com/en-us/library/aa645767%28v=vs.71%29. aspx – Davio