C# 嵌套类如何从容器类继承?

C# 嵌套类如何从容器类继承?,c#,compiler-construction,C#,Compiler Construction,今天我在工作中查看代码库中的其他代码时遇到了下面的代码,我甚至不知道这样的代码是如何工作的。有人能给我解释一下这是怎么可能的吗 class Outer { void MethodOne(); // Non-virtual // more non-virtual methods public class InnerFoo : Outer { // HOW is this possible? void InnerMethodOne();

今天我在工作中查看代码库中的其他代码时遇到了下面的代码,我甚至不知道这样的代码是如何工作的。有人能给我解释一下这是怎么可能的吗

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
    }
}

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

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

就输出字节码而言,此代码与以下代码相同

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

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

class InnerBar : Outer {
    // stuff
}

需要记住的一点是,对于编译器来说,类只是一个类,无论是否嵌套。嵌套类和普通类之间的唯一区别在于编译器如何允许其他类引用它。

即使可能,它也可能不是最佳实践,也没有什么意义。不确定如何回答您的问题,除了。。为什么不可能呢?啊,谢谢。我从来没有使用过嵌套类(也没有看到真正的原因),所以我不知道编译器是如何处理它们的。它们非常值得你花时间——它们对于保存封装非常有用,或者当你需要避免用各种实用程序类污染API命名空间时。