Considera i seguenti due casi:
-
caso 1:
class A { private const string MyConst="Hello"; internal void CallMe() { System.Console.WriteLine(MyConst); } }
-
Caso 2:
class A { internal void CallMe() { System.Console.WriteLine("Hello"); } }
Ora, se il metodo CallMe () fosse chiamato 1000 volte, è una buona idea definirlo come costante (che significa solo una copia della stringa per classe) o usare una stringa semplice sarebbe meglio. Ho appena controllato il codice MSIL per entrambe le classi e ho scoperto che in entrambi i casi, il compilatore .Net sta inserendo la stringa letterale all'interno di WiriteLine (). Quindi è un overhead definire la stringa come una costante?
Il motivo principale per cui ho fatto questa domanda è perché volevo capire come funziona il CLR quando qualcosa è definito come costante a livello di classe e quando ho visto che il codice MSIL aveva il campo const e anche la stringa in WriteLine () sostituito con la stringa vera e quindi mi chiedevo perché creare un campo costante se verrà usato in un solo metodo. Questo è solo un esempio di codice che ho scritto per presentare il mio dubbio. E dalle risposte che ho imparato dopo:
- È preferibile utilizzare direttamente la stringa se non verrà utilizzata al di fuori del metodo
- Se è usato in tutte le classi / classi, lo dichiari come costante a livello di classe
- Inseriscilo in resex se ha bisogno di localizzazione
Grazie a tutti per le risposte / i commenti.