Наличие “+” в имени класса?

Имя класса: MyAssembly.MyClass+MyOtherClass

Проблема, очевидно, + как разделитель, вместо традиционной точки, ее функции, и найти, что официальная документация видит, существуют ли разделители других.

12
задан Rand Random 19 February 2018 в 16:59
поделиться

2 ответа

Именно так представлен вложенный тип. Так, например:

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

создаст тип с полным именем Foo.Outer + Nested в скомпилированном коде. (Так вот что вернет, например, typeof (Outer.Nested) .FullName .)

Мне не ясно, является ли это определенным поведением или просто Microsoft Компилятор C # предпочитает использовать; это «невыразимое» имя в том смысле, что вы не можете явно объявить класс с + в нем в обычном C #, поэтому компилятор знает, что он не будет конфликтовать ни с чем другим. Насколько я понимаю, раздел 10.3.8 спецификации C # 3 не диктует скомпилированное имя.

РЕДАКТИРОВАТЬ: Я только что видел, что Type.AssemblyQualifiedName указывает, что "+" используется перед именем вложенного типа ... но все еще не ясно, действительно ли это требуется или просто обычный.

20
ответ дан 2 December 2019 в 05:03
поделиться

Это то, что компилятор использует в метаданных для представления вложенного класса.

т.е.

class A { class B {} }

будет рассматриваться как

class A+B

в метаданных

10
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: