我在今天看到代码库中的其他内容时遇到了以下代码,我甚至无法弄清楚这样的事情是如何工作的。有人可以向我解释这是可能的吗?
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
}
}
我不知道编译器如何解析它,更不用说解释这样的类结构了。
答案 0 :(得分:1)
从编译器的角度来看,这是相当简单的。编译器为从Outer
继承的两个类输出MSIL。尝试在InnerBar
命名空间之外引用InnerFoo
或Outer
的任何代码都将导致编译错误。
就输出字节代码而言,此代码与以下
相同class Outer {
void MethodOne();
// more non-virtual methods
}
class InnerFoo : Outer {
void InnerMethodOne();
// more methods on the derived class
}
class InnerBar : Outer {
// stuff
}
要记住的相关要点是,对于编译器而言,类只是一个类,无论是否嵌套。嵌套类和普通类之间的唯一区别是编译器允许其他类引用它。