16

班级名称:MyAssembly.MyClass+MyOtherClass

问题明显是+as分隔符,而不是传统的dot,它的作用,找官方文档看看有没有其他的分隔符。

4

2 回答 2

23

这就是表示嵌套类型的方式。例如:

namespace Foo
{
    class Outer
    {
        class Nested {}
    }
}

Foo.Outer+Nested将在编译后的代码中创建一个全名为 的类型。(typeof(Outer.Nested).FullName例如,这就是返回的结果。)

我不清楚这是指定的行为,还是 Microsoft C# 编译器选择使用的行为;这是一个“难以言说”的名称,因为您无法在普通 C# 中显式声明带有 + 的类,因此编译器知道它不会与其他任何内容发生冲突。据我所知,C# 3 规范的第 10.3.8 节并未规定编译后的名称。

编辑:我刚刚看到它Type.AssemblyQualifiedName指定“+”用于嵌套类型名称之前......但目前尚不清楚这是否实际需要或只是常规的。

于 2010-03-14T18:41:05.567 回答
12

这是编译器在元数据中用来表示嵌套类的内容。

IE

class A { class B {} }

将被视为

class A+B

在元数据中

于 2010-03-14T18:40:13.663 回答