2009-08-11 7 views
5

He estado escribiendo código sin darme cuenta de POR QUÉ puedo acceder a los valores constantes en los métodos estáticos .
¿Por qué una variable const está disponible dentro de un método estático?

¿Por qué es posible acceder a los valores const sin declararlo como static?

por ejemplo,) Es legal para llamar IMAGE_FILE_EXTENSION dentro AddImageToDocument(...)

public abstract class ImageDocumentReplacer : DocumentReplacer 
{ 
    private const string IMAGE_FILE_EXTENSION = ".tif"; 

    private static void AddImageToDocument(int documentId, string separatedPath) 
    { 
     Console.WriteLine(IMAGE_FILE_EXTENSION); 
    } 
} 

Respuesta

17

const miembros son implícitamente static. Pertenecen a la clase en lugar de a una instancia específica. Como consecuencia, no puede usar this.myConstant sino MyClass.myConstant.

Citando la especificación C# 3.0 (sección §10.4 Constantes):

Aunque constantes se consideran static miembros, un constante declaraciónno exige ni permite un modificador static. Es un error que el mismo modificador aparezca varias veces en una declaración constante.

+2

Solo agregue: intente usar static const, y su el compilador probablemente se quejará;) –

+0

@Samuel: ¡Sí, siree! – Sung

+0

Nunca pensé en const ser * implícitamente * estático ... Gracias Mehrdad. – Sung

1

yo esperaría que, como una constante no puede cambiar instancia a instancia, que los hace seguros para el acceso de un método estático.

2

¿Por qué no debería ser posible? Dado que el valor está fijado en tiempo de compilación, no hay una posible incoherencia (como podría haber con variables o readonly campos que se pueden inicializar a diferentes valores para diferentes instancias en tiempo de ejecución)

Cuestiones relacionadas