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

时间:2017-05-25 01:41:27

标签: c# compiler-construction

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

class InnerBar : Outer {
    // stuff
}

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