嵌套类.GetType()

在弄乱嵌套类并将类型名称输出到控制台窗口时,我注意到了一些奇怪的事情。 我想知道是否有人可以为我解释一下。 在主类上调用GetType()时,它返回我期望的内容,即相关名称空间后面的类的名称。 即Namespace.Namespace.Classname

但是,当我从封闭类中调用一个函数来返回嵌套类的类型时,我得到返回的值,如下所示:

 Namespace.Namespace.ClassNameEnclosing + ClassNameNested. 

为什么它不是简单地以点符号返回。 为何选择+符号? 我只是好奇在后台发生了什么导致这种表示法。

点用于表示名称空间。 嵌套类仍然在同一个命名空间中,它只是嵌套在一个类中。

我不能随意(从对ECMA-335的简短研究中)判断一个包含点的不合格类型名称在IL中是否实际有效; 我怀疑它会,但它会使各种诊断难以阅读。

反思不是针对特定语言的。

点表示法( Namespace.Namespace.OuterClassName.InnerClassName )特定于C#。 reflection必须适用于可用于编译为IL的每种语言。 此外,在反映时,如果不检查Type类的其他属性,如何确定OuterClassName不仅仅是命名空间的另一部分?

你问为什么它不是简单的返回点符号? 您不妨问一下“为什么它不是简单地以IronPython表示法返回”,或IronLisp表示法,或L#表示法或BOo表示法,或者……

学习reflection中使用的符号,您可以使用它来分析用任何语言编写的代码。