Имя класса: MyAssembly.MyClass+MyOtherClass
Проблема, очевидно, +
как разделитель, вместо традиционной точки, ее функции, и найти, что официальная документация видит, существуют ли разделители других.
Именно так представлен вложенный тип. Так, например:
namespace Foo
{
class Outer
{
class Nested {}
}
}
создаст тип с полным именем Foo.Outer + Nested
в скомпилированном коде. (Так вот что вернет, например, typeof (Outer.Nested) .FullName
.)
Мне не ясно, является ли это определенным поведением или просто Microsoft Компилятор C # предпочитает использовать; это «невыразимое» имя в том смысле, что вы не можете явно объявить класс с + в нем в обычном C #, поэтому компилятор знает, что он не будет конфликтовать ни с чем другим. Насколько я понимаю, раздел 10.3.8 спецификации C # 3 не диктует скомпилированное имя.
РЕДАКТИРОВАТЬ: Я только что видел, что Type.AssemblyQualifiedName
указывает, что "+" используется перед именем вложенного типа ... но все еще не ясно, действительно ли это требуется или просто обычный.
Это то, что компилятор использует в метаданных для представления вложенного класса.
т.е.
class A { class B {} }
будет рассматриваться как
class A+B
в метаданных