Your variable is triggerdefined as having a type ISubscriber(regardless of the type of the actual object). ISubscriberonly has one method signature:
void HandleMessage(IMessage message);
Thus, the compiler calls this method.
In fact, if you did this:
class TriggerSubscriber : ISubscriber
{
public void HandleMessage(IMessage message)
{
}
public void HandleMessage(int something)
{
}
}
And then try to do this:
ISubscriber trigger = new TriggerSubscriber();
trigger.HandleMessage(4);
The compiler will complain about the lack of such a method in ISubscriber, which takes a parameter int.
There are three options:
TriggerMessagetrigger TriggerSubscriber, ISubscriber, TriggerSubscriber HandleMessage:
((TriggerSubscriber)trigger).HandleMessage(new TriggerMessage());
:
class TriggerSubscriber : ISubscriber
{
public void HandleMessage(IMessage message)
{
var triggerMessage = message as TriggerMessage;
if(triggerMessage != null)
{
HandleMessage((TriggerMessage)triggerMessage);
return;
}
}
public void HandleMessage(TriggerMessage message)
{
}
}
# 3 ( , TriggerMessage HandleTriggerMessage ),