嵌套类.GetType()

时间:2012-02-02 10:29:46

标签: c# types nested-class

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

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

Namespace.Namespace.ClassNameEnclosing + ClassNameNested.

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

点符号(Namespace.Namespace.OuterClassName.InnerClassName)特定于C#。反射必须适用于您可以用来编译IL的每种语言。此外,在反映时,如果不检查OuterClassName类的其他属性,Type不仅仅是命名空间的另一部分,你怎么能确定?

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

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