在班级名称中加上“+”?

时间:2010-03-14 18:38:22

标签: c# class separator

班级名称:MyAssembly.MyClass+MyOtherClass

问题显然是+作为分隔符,而不是传统点,它的功能,以及查找官方文档以查看是否存在其他分隔符。

2 个答案:

答案 0 :(得分:19)

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

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

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

我不清楚这是指定的行为,还是Microsoft C#编译器选择使用的行为;它是一个“不可言喻”的名称,因为你无法在普通的C#中明确地声明一个带有+的类,所以编译器知道它不会与其他任何东西冲突。据我所知,C#3规范的第10.3.8节没有规定编译的名称。

编辑:我刚刚看到Type.AssemblyQualifiedName指定“+”用于嵌套类型名称之前......但仍然不清楚这是否真的必需或者只是传统的。

答案 1 :(得分:10)

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

class A { class B {} }

将被视为

class A+B
元数据中的