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命名空间时。