Перегрузка разрешается во время компиляции, поэтому вы не можете ожидать, что она решит, какую перегрузку вызвать, в зависимости от типа времени выполнения из aec
. Перегрузка для вызова должна быть решена во время компиляции.
Здесь вам действительно нужен тип полиморфизма " subtyping " (он же просто "полиморфизм" в C# терминология), а не ad ho c полиморфизм (он же «перегрузка»).
Вместо этого переместите методы-обработчики в подклассы:
public abstract class AbstractExampleClass
{
public abstract void Specific();
}
public class SpecificExampleClassA : AbstractExampleClass
{
public override void Specific()
{
// DoSomething
}
}
public class SpecificExampleClass : AbstractExampleClass
{
public override void Specific()
{
// DoSomething Else
}
}
public class handler
{
public void Handle(AbstractExampleClass aec)
{
aec.Specific();
}
}