Próbuję wykonać następujące czynności:Dynamiczny wysyłka do klasy pochodnej w 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 hit metody rezerwowej zamiast jednego w klasie pochodnej. Używam dynamicznej wysyłki w ramach tej samej klasy przez cały czas i uważam ją za naprawdę użyteczną/czystą. Czy nie będzie działać z klasami pochodnymi, jak pokazano w powyższym przykładzie?
EDYCJA: Wydaje się, że w odpowiedziach występuje pewne zamieszanie. Zasadniczo używam w wykonaniu przez cały czas:
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
{
}
}
działa świetnie na kiedy nie znasz dokładny typ wcześniej i nie chcesz używać wielki switch. Zastanawiasz się, czy można to zaimplementować z dziedziczeniem, w którym klasa podstawowa przechowuje metodę rezerwową, a klasa pochodna zawiera wszystkie bardziej szczegółowe metody.
Moje przypuszczenie jest, że ReceiveEvent jest wywoływana na BaseClass zamiast DerivedClass. Czy próbowałeś przesłonić ReceiveEvent w DerivedClass? Jest wirtualny, więc możesz zrobić "publiczne nadpisanie void ReceiveEvent (Event evt)" Oto kilka informacji na temat metod wirtualnych: http://msdn.microsoft.com/en-us/library/aa645767%28v=vs.71%29. aspx – Davio