在弄乱嵌套类并将类型名称输出到控制台窗口时,我注意到了一些奇怪的事情。我想知道是否有人可以为我解释一下。在主类上调用GetType()
时,它会返回我期望的内容,即相关名称空间后的类的名称。即Namespace.Namespace.Classname
但是,当我从封闭类中调用一个函数来返回嵌套类的类型时,我得到了返回的值:
Namespace.Namespace.ClassNameEnclosing + ClassNameNested.
为什么不简单地以点符号返回。为什么+符号?我只是好奇在背景中发生了什么导致这种表示法。
答案 0 :(得分:5)
Dots用于表示名称空间。嵌套类仍然在同一个命名空间中,它只是嵌套在一个类中。
我不能随意(从ECMA-335的简短研究中)判断包含点的不合格类型名称在IL中是否真正有效;我怀疑它会,但它会使各种诊断难以阅读。
答案 1 :(得分:1)
反思不是针对特定语言的。
点符号(Namespace.Namespace.OuterClassName.InnerClassName
)特定于C#。反射必须适用于您可以用来编译IL的每种语言。此外,在反映时,如果不检查OuterClassName
类的其他属性,Type
不仅仅是命名空间的另一部分,你怎么能确定?
你问为什么它不是简单的返回点符号?您不妨问一下“为什么它不仅仅作为IronPython表示法返回”,或IronLisp表示法,或L#表示法,或BOo表示法,或...
了解反射中使用的符号,您可以使用它来分析用任何语言编写的代码。