嵌套 class 如何从容器 class 继承?

How does a nested class inherit from a container class?

我今天在工作中查看代码库中的其他内容时遇到了以下代码,我什至无法弄清楚这样的代码是如何工作的。有人可以向我解释这是怎么可能的吗?

class Outer {
    void MethodOne(); // Non-virtual
    // more non-virtual methods
    public class InnerFoo : Outer { // HOW is this possible?
         void InnerMethodOne(); 
         // more methods on the derived class
    }
    public class InnerBar : Outer { // o_O
         // stuff
    }
}

我不知道编译器是如何解析这个的,更不用说解释这样的class结构了。

从编译器的角度来看,这是相当简单的。编译器为继承自 Outer 的两个 classes 输出 MSIL。任何试图在 Outer 的命名空间之外引用 InnerBarInnerFoo 的代码都将导致编译错误。

在输出字节码方面,这段代码与下面的相同

class Outer {
    void MethodOne();
    // more non-virtual methods
}

class InnerFoo : Outer {
    void InnerMethodOne(); 
    // more methods on the derived class
}

class InnerBar : Outer {
    // stuff
}

要记住的相关点是,对于编译器而言,class 只是一个 class,无论是否嵌套。嵌套 class 和普通 class 之间的唯一区别是编译器如何允许其他 class 引用它。