const
implica static
(non è necessaria un'istanza per fare riferimento al valore const
).
Desidero aggiungere anche questo punto importante: quando si collega (riferimento) a un assieme con un public const
, tale valore è copiato nell'assieme. Pertanto, se il valore const
nell'assieme di riferimento cambia, l'assembly avrà ancora il valore originariamente compilato.
Se questo comportamento è non accettabile, è consigliabile prendere in considerazione il campo come campo public static readonly
.
lib.dll, fornito come binario:
public class Foo {
public const int HATS = 42;
public static readonly int GLOVES = 33;
}
App.exe, riferimenti lib.dll:
Foo.HATS // This will always be 42 even if the value in Lib.dll changes,
// unless App.exe is recompiled.
Foo.GLOVES // This will always be the same as Foo.GLOVES in Lib.dll
Da MSDN:
Non creare una costante per rappresentare le informazioni che si prevede di modificare in qualsiasi momento. Ad esempio, non utilizzare un campo costante per memorizzare il prezzo di un servizio, un numero di versione del prodotto o il nome del marchio di un'azienda. Questi valori possono cambiare nel tempo e poiché i compilatori propagano le costanti, l'altro codice compilato con le librerie dovrà essere ricompilato per vedere le modifiche.
Da DotNetPerls:
DLL. Quando si utilizza un campo o una dichiarazione const
, il compilatore C# incorpora in realtà il valore della variabile const
direttamente nel codice IL. Pertanto, in pratica elimina il const
come entità separata.
Attenzione: Se i programmi che dipendono da un const
non vengono ricompilati dopo le const
variazioni di valore, essi possono rompere [perché continueranno a utilizzare il valore precedente].
fonte
2012-10-31 02:23:11
Possibile duplicato http://stackoverflow.com/questions/408192/why-cant-i-have-public-static-const-string-s-stuff-in-my-class – himanshupareek66