Clase: MyAssembly.MyClass+MyOtherClass
¿Tiene un "+" en el nombre de la clase?
El problema es, obviamente, el +
como separador, en lugar de puntos traditionnal, su función, y encontrar documentación oficial para ver si existen otros separadores.
Clase: MyAssembly.MyClass+MyOtherClass
¿Tiene un "+" en el nombre de la clase?
El problema es, obviamente, el +
como separador, en lugar de puntos traditionnal, su función, y encontrar documentación oficial para ver si existen otros separadores.
eso es sólo la forma en que un tipo anidado está representado. Así, por ejemplo:
namespace Foo
{
class Outer
{
class Nested {}
}
}
creará un tipo con un nombre completo de Foo.Outer+Nested
en el código compilado. (Y eso es lo typeof(Outer.Nested).FullName
volvería, por ejemplo.)
No es claro si esto es especifica el comportamiento, o simplemente lo que el compilador Microsoft C# opta por utilizar; es un nombre "indescriptible" porque no se puede declarar explícitamente una clase con un + en él en C# normal, por lo que el compilador sabe que no chocará con ninguna otra cosa. La sección 10.3.8 de la especificación C# 3 no dicta el nombre compilado hasta donde puedo ver.
EDIT: Acabo de ver que Type.AssemblyQualifiedName
especifica que "+" se utiliza para preceder a un nombre de tipo anidado ... pero todavía no está claro si o no que en realidad es requerido o simplemente convencional.
Otra forma en que este detalle de implementación se manifiesta es en tipos genéricos anidados. Si tiene la clase Outer
Si el nombre de la clase anidada fue simplemente elegido por el compilador C# de Microsoft, ¿cómo sería posible la interoperabilidad con otros compiladores? ¿Significa que no se pueden usar clases anidadas si, por ejemplo, usando el compilador Mono? –
divo: Supongo que el compilador C# de Mono sigue el mismo esquema que el de Microsoft. Del mismo modo en cualquier otro lugar donde algo no se especifica en la especificación de C#. –
Esto es lo que el compilador usa en los metadatos para representar una clase anidada.
decir
class A { class B {} }
sería visto como
class A+B
en los metadatos
gracias. ¿Este es el único signo que podemos encontrar de esta manera? – Graveen
Estaba mirando la biblioteca .NET (1.1) en ILDASM y los tipos anidados allí mostraban '/' como separador. –
Entonces ILDASM miente. –
¿Por qué necesita saber esto? ¿Qué estás tratando de lograr con este conocimiento? –