【发布时间】:2014-09-09 11:52:09
【问题描述】:
为什么这在 C# 中是非法的?
class Foo: Foo.BaseFoo //Circular base class dependency compile time error
{
private class BaseFoo {...}
...
}
我不是在争论这什么时候有用或没有用,但我想知道是什么原因不允许这样的代码编译。私有接口也有类似的限制。
更新
看到它是重复的,我将把问题更多地集中在为什么这对于看起来更有用的接口无效?
而且,更重要的是,为什么 Roslyn 预览版看起来是合法的,如图所示 here
【问题讨论】:
-
要编译BaseFoo,必须先编译Foo。要编译 Foo,必须先编译 BaseFoo。编译 BaseFoo ...
-
@Fildor:严格来说并非如此。为什么一般情况下
Foo必须在BaseFoo之前编译? -
@Tomtom:不,它会给出同样的编译器错误。
-
@Fildor 没有证据表明这是真的。 C# 编译器是两遍的,它在继续编写方法内部的代码之前检查类型声明和签名。这可能更像是一个明确的设计选择,而不是技术限制。可能存在我们看不到的隐藏陷阱,编译器中可能存在技术限制,但看起来确实很随意。
-
@Fildor:在看到骗子之后,问题似乎正如我最初所怀疑的那样:没有技术上的原因无法做到这一点,但它会引入很多复杂性,而且非常明显受益。
标签: c#