Haben Sie ein "+" im Klassennamen?

9

Klassenname: MyAssembly.MyClass+MyOtherClass

Das Problem ist offensichtlich das + als Trennzeichen, anstelle des traditionellen Punktes, seine Funktion und die offizielle Dokumentation, um zu sehen, ob andere Trennzeichen existieren.

    
Graveen 14.03.2010, 18:38
quelle

2 Antworten

14

Genau so wird ein verschachtelter Typ dargestellt. Also zum Beispiel:

%Vor%

erstellt einen Typ mit dem vollständigen Namen von Foo.Outer+Nested im kompilierten Code. (So ​​würde zum Beispiel typeof(Outer.Nested).FullName zurückkehren.)

Es ist mir nicht klar, ob dies spezifiziertes Verhalten ist oder nur, was der Microsoft C # -Compiler wählt; Es ist ein "unaussprechlicher" Name, weil Sie eine Klasse mit einem + darin in normalen C # nicht explizit deklarieren können, so dass der Compiler weiß, dass es mit nichts anderem kollidieren wird. Abschnitt 10.3.8 der C # 3-Spezifikation diktiert den kompilierten Namen nicht, soweit ich sehen kann.

EDIT: Ich habe gerade gesehen, dass Type.AssemblyQualifiedName das angibt "+" wird verwendet, um einem verschachtelten Typnamen voranzukommen ... aber es ist immer noch nicht klar, ob dies tatsächlich erforderlich oder nur konventionell ist.

    
Jon Skeet 14.03.2010, 18:41
quelle
10

Dies ist, was der Compiler in den Metadaten verwendet, um eine verschachtelte Klasse darzustellen.

d. h.

%Vor%

würde als

gesehen werden %Vor%

in den Metadaten

    
Ben Voigt 14.03.2010 18:40
quelle

Tags und Links