Я пытаюсь вызвать перегруженный метод в коде так:
public abstract class BaseClass<T>
{
public abstract bool Method(T other);
}
public class ChildClass : BaseClass<ChildClass>
{
public bool Method(BaseClass<ChildClass> other)
{
return this.Method(other as ChildClass);
}
public override bool Method(ChildClass other)
{
return this == other;
}
}
class Program
{
static void Main(string[] args)
{
BaseClass<ChildClass> baseObject = new ChildClass();
ChildClass childObject = new ChildClass();
bool result = childObject.Method(baseObject);
Console.WriteLine(result.ToString());
Console.Read();
}
}
Все выглядит хорошо, но генерируется исключение StackOverflowException.
В моем понимании, если я вызываю перегруженный метод, то должна вызываться самая специфическая версия метода, но в этом случае вместо Method(ChildClass other)
.
вызывается
Method(BaseClass<ChildClass> other)
.
Но когда я использую приведение:
return ((BaseClass<ChildClass>)this).Method(other as ChildClass);
все работает как положено.
Я что-то пропустил? Или это ошибка в .NET?
Протестировано в .NET 2.0,3.5,4.0