在处理嵌套类并将类型的名称输出到控制台窗口时,我注意到了一些奇怪的事情。我想知道是否有人能给我解释一下。在主类上调用GetType()时,它会返回我所期望的结果,即相关名称空间后面的类名。即Namespace.Namespace.Classname
但是,当我从封闭类中调用一个函数来返回嵌套类的类型时,我得到的返回值如下:
Namespace.Namespace.ClassNameEnclosing + ClassNameNested.为什么不简单地以点符号的形式返回。为什么要加+符号?我只是好奇在背景中发生了什么,导致了这个符号。
发布于 2012-02-02 18:32:08
点用于表示名称空间。嵌套的类仍然在同一个名称空间中,只是嵌套在一个类中。
我不能马上断定(通过对ECMA-335的简单研究)包含一个点的非限定类型名称在IL中是否真的有效;我怀疑它是有效的,但它会使所有类型的诊断更难阅读。
发布于 2012-02-02 18:34:39
反射不是特定于语言的。
点符号(Namespace.Namespace.OuterClassName.InnerClassName)是特定于C#的。反射必须适用于您可以用来编译为IL的每种语言。此外,在反射时,如果不检查Type类的其他属性,如何确定OuterClassName不只是名称空间的另一部分?
你会问为什么它不能简单地返回为点符号呢?您可能会问“为什么不简单地返回为IronPython表示法”、IronLisp表示法、L#表示法、BOo表示法,或者……
学习反射中使用的符号,您可以使用它来分析用任何语言编写的代码。
https://stackoverflow.com/questions/9110744
复制相似问题