Tutti sanno del nesting separator (il segno "+") nel fully qualified name di una classe (in italiano come si dice?
nome completo?).
Ma non tutti sanno che il segno "+" può comparire anche all'interno
del nome di un namespace. Non in C#, però in IL sì.
Giochiamo un po':
// Foo.cs
namespaceA.BC
{
class D{}
}
Compiliamo il codice C# con:
csc /target:library Foo.cs
otteniamo il codice IL:
ildasm Foo.dll /out=Foo.il
e in tutte e due le sezioni "CLASS STRUCTURE DECLARATION" e "CLASS MEMBERS DECLARATION"
la dichiarazione del namespace la cambiamo da:
.namespace A.BC
a:
.namespace 'A.B+C'
e poi compiliamo il codice IL con:
ilasm /DLL Foo.il
Sorpresi del messaggio "Operation completed successfully"?
Adesso il nome completo della classe D sarà A.B+C.D!
La morale? La morale è che non dovete mai cercare il "+" nel nome
completo di un tipo come il nostro simpaticissimo Giancarlo
perché rischiate di trovare cose che non esistono, come per esempio A.B
oppure C.D :-)