【问题标题】:Why can't I inherit from a private class / interface?为什么我不能从私有类/接口继承?
【发布时间】: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#


【解决方案1】:

这不是访问修饰符的问题——类是私有的。这是一个循环基类依赖。您尝试定义一个名为 Foo 的类,它继承了一个名为 BaseFoo 的嵌套类。

【讨论】:

猜你喜欢
  • 2014-06-01
  • 1970-01-01
  • 2018-09-04
  • 2010-10-20
  • 2022-01-04
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多