2010-11-26 15 views
8

De acuerdo con la documentación de MSDN en la propiedad StringComparer.OrdinalIgnoreCase:¿Puede un tipo anónimo heredar de otro tipo?

La propiedad OrdinalIgnoreCase realidad devuelve una instancia de una clase anónima derivada de la clase StringComparer.

¿Es esta una característica con la que no estoy familiarizado, tipos anónimos con herencia? ¿O por "clase anónima" el autor simplemente quiso decir "clase interna derivada de StringComparer, no visible para el código del cliente"?

+0

posible duplicado de [¿Puede una clase anónima C implementar una interfaz?] (Http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class-implement-an-interface) – nawfal

Respuesta

7

Si nos fijamos en el código fuente de StringComparer, se puede ver que OrginalIgnoreCase devuelve una instancia de OrdinalComparer, que se deriva de StringComparer.

No hay nada "anónimo" sobre esto que pueda ver, es solo que es interno por lo que no puede verlo desde fuera del marco.

+0

Gracias por hacer lo que yo era demasiado perezosa para hacer, mirando la fuente real;) –

4

El compilador puede crear tipos anónimos que heredan de otro tipo; no se puede. Es una lástima, ya que sería una buena característica crear un tipo anónimo sobre la marcha que herede de otra clase o implemente una interfaz.

+4

Sí, creando un tipo anónimo que implemente una interfaz sería un poco limpio. – BFree

9

No es un tipo anónimo en el significado normal de C# del término.

Es simplemente un tipo que es interno, por lo que no conoce el nombre: no puede hacer referencia al tipo exacto dentro de su código.

+0

Gracias; eso es básicamente lo que me preguntaba. Di más +1 pero acepté la respuesta de Will, ya que realmente se tomó la molestia de mirar el código fuente (en Reflector, supongo). –

+0

El código fuente se puede descargar desde MS (aunque su proyecto fuente de referencia es una vergonzosa calamidad). También lo he indexado en Windows, por lo que es muy rápido buscar este tipo de cosas. http://referencesource.microsoft.com/netframework.aspx –

3

Tipo anónimo es anónimo para nosotros no es el CLR y el compilador. El compilador utiliza una denominación divertida que incluye <> en el nombre y ¡solo el compilador puede hacer eso! y tal vez Chuck Norris ...

+4

Chuck Norris sabe el nombre del tipo anónimo. –

+3

Chuck Norris puede disparar herencia múltiple en un tipo anónimo ... – Aliostad

+1

Correcto, pero no estaba seguro si * esto * es lo que la documentación incluso quiso decir con "anónimo" (el tipo generado por el compilador proporcionado por, por ejemplo, la característica de tipos anónimos de C#) Resulta que, de la respuesta de Will, es solo un significado completamente diferente. –

Cuestiones relacionadas