Nested Class .GetType()

本文关键字:GetType Class Nested | 更新日期: 2023-09-27 18:22:18

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

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

Namespace.Namespace.ClassNameEnclosing + ClassNameNested.

为什么它不简单地以点表示法返回。为什么是+符号?我只是好奇是什么在背景中发生了这种符号。

Nested Class .GetType()

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

我不能马上(从ECMA-335的简短研究中)判断一个包含句点的不合格类型名称在IL中是否真的有效;我怀疑会,但这会使各种诊断更难阅读。

反射不是特定于语言的。

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

你会问,为什么它不简单地以点表示法返回?你可能会问"为什么它不简单地作为IronPython符号返回",或者IronLisp符号,或者L#符号,或者BOo符号,或者。。。

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