类名:MyAssembly.MyClass+MyOtherClass
问题显然出在使用加号+
作为分隔符,而不是传统的点号。需要查找官方文档以确定是否存在其他的分隔符及其功能。
这就是嵌套类型的表现方式。例如:
namespace Foo
{
class Outer
{
class Nested {}
}
}
在编译代码中将创建一个名称为Foo.Outer+Nested
的类型。 (例如,typeof(Outer.Nested).FullName
将返回这样的名称。)
我不确定这是否是指定的行为,或者只是微软C#编译器选择使用的方式;在正常的C#中,您无法明确声明带有+的类,因此编译器知道它不会与其他任何内容发生冲突。 根据我所见,C# 3规范的第10.3.8节并未规定编译后的名称。
编辑:我刚刚看到Type.AssemblyQualifiedName
指定“+”用于前导嵌套类型名称...但仍不清楚这是否实际上是必需还是惯例。
1>和Outer+Inner<
2>。从CLR的角度来看,嵌套类型实际上只是语言告诉我们的一个方便的谎言。嵌套体现在内部类型能够访问外部类型的私有成员的能力上。(命名空间也是类似的虚构概念。) - Eric LippertX.Y
),元数据编码(例如Y
),CIL名称(例如X/Y
)和Reflection名称(例如X+Y
)。 - kvb这是编译器在元数据中用于表示嵌套类的内容。
即:
class A { class B {} }
会被视为
class A+B
在元数据中