我试图在这样的代码中调用重载方法:
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(BaseClass<ChildClass> other)
调用的是Method(ChildClass other)
.
但是当我使用演员表时:
return ((BaseClass<ChildClass>)this).Method(other as ChildClass);
一切都按预期工作。我错过了什么吗?或者这是.NET 中的一个错误?在 .NET 2.0、3.5、4.0 中测试