Angenommen, ich habe eine Basisklasse namens IMessage und viele abgeleitete Nachrichtenklassen.Wie rufe ich verschiedene Methoden für verschiedene Klassen-Typen in einem generischen Nachrichtenempfänger auf?
In meinem Programm habe ich eine Methode, die alle Nachrichten empfängt:
void ReceiveMessage(IMessage message)
{
}
und ich möchte für jede Art von Nachricht, die eine spezifische Methode aufzurufen. Es wäre toll, wenn ich tun kann:
void ReceiveMessage(IMessage message)
{
HandleMessage(message);
}
void HandleMessage(DummyMessage message)
{
Blah;
}
void HandleMessage(SillyMessage message)
{
Yuk;
}
..aber scheinbar „wir gehen nicht aus, wie die“.
Wie also würde ich spezifische Handler für bestimmte Nachrichten implementieren, die von einem einzigen Message-Handler aus aufgerufen werden?
Sollte nicht die IMessage-Schnittstelle die ‚gemeinsame‘ Methode (n) definieren, die alle Implementierungen von IMessage implementieren, die erlauben würde, Sie diese Methoden nur in Ihrer ReceiveMessage-Methode aufrufen? –
@TrevorPilley Kommt drauf an. Es gibt Zeiten, in denen das nicht angebracht ist. Viele Spiele-Engines oder 3D-Szenendiagramme haben beispielsweise Situationen, in denen jeder Szenentyp (Nachricht) von verschiedenen "Darstellern" innerhalb der Szene sehr unterschiedlich gehandhabt wird. –
Ich möchte, dass der Handler in einer anderen Klasse aufgerufen wird, nicht in der Nachricht selbst ... (Zum Beispiel würde eine Serverklasse alle Handler für verschiedene Nachrichten enthalten.) – Pygmy