嵌套 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
的命名空间之外引用 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
}
要记住的相关点是,对于编译器而言,class 只是一个 class,无论是否嵌套。嵌套 class 和普通 class 之间的唯一区别是编译器如何允许其他 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
的命名空间之外引用 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
}
要记住的相关点是,对于编译器而言,class 只是一个 class,无论是否嵌套。嵌套 class 和普通 class 之间的唯一区别是编译器如何允许其他 class 引用它。