示例代码:
public class SimpleClass
{
private NestedClass nestedClass = new NestedClass();
public class NestedClass : SimpleClass
{
}
}
// when instantiating in say.. main()
SimpleClass simpleClass = new SimpleClass();
Run Code Online (Sandbox Code Playgroud)
我来自C++背景,所以我很难绕过这里发生的事情.具体来说我们如何实例化NestedClass内部SimpleClass.理想情况下编译器需要完全布局SimpleClass才能实例化NestedClass,而这又需要SimpleClass.它本质上是递归的.
这就是我们运行此代码时会发生的情况.我们得到StackOverflow:)例外!
在C++世界中,编译器会incomplete type在这种情况下哭泣.
所以我的问题的关键是:
这里发生了什么,编译器如何布局这个类(我知道它的实现细节,但没有完整的类型我们如何实例化一个对象?)
此运行时异常是故意的,还是应该是编译时错误?