2009-08-11 4 views
5

Ho scritto codice senza capire PERCHÉ posso accedere ai valori costanti all'interno dei metodi statici .
Perché una variabile const è disponibile all'interno di un metodo statico?

Perché è possibile accedere ai valori const senza dichiararlo come static?

Ad es) E 'legale chiamare IMAGE_FILE_EXTENSION entro 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); 
    } 
} 

risposta

17

const membri sono implicitamente static. Appartengono alla classe piuttosto che a un'istanza specifica. Di conseguenza, non è possibile utilizzare this.myConstant ma MyClass.myConstant.

Citando le specifiche C# 3.0 (sezione §10.4 Costanti):

Anche se costanti sono considerati static membri, una costante dichiarazione non impone né consente un modificatore static. È un errore che lo stesso modificatore appaia più volte in una dichiarazione costante.

+2

Solo aggiungendo: prova a utilizzare stat const e il tuo il compilatore probabilmente si lamenterà;) –

+0

@ Samuel: Sì, siree lo fa! – Sung

+0

Non ho mai pensato che const fosse * implicitamente * statico ... Grazie Mehrdad. – Sung

1

Mi aspetterei che, poiché una costante non può cambiare istanza in istanza, questo rende sicuro l'accesso da un metodo statico.

2

Perché non dovrebbe essere possibile? Poiché il valore è fisso in fase di compilazione, non è possibile incongruenza (come con variabili o campi readonly che possono essere inizializzati su valori diversi per istanze diverse in fase di esecuzione)

Problemi correlati