Eventuali duplicati:
“const correctness” in C#Perché C# non è stato progettato con 'const' per variabili e metodi?
ho il sospetto const
è stata semplificata per il C# spec per semplicità linguaggio generale. C'è una ragione specifica per cui non possiamo dichiarare riferimenti o metodi variabili come const
come possiamo fare con C++? ad esempio:
const MyObject o = new MyObject(); // Want const cast referenece of MyObject
o.SomeMethod(); // Theoretically legal because SomeMethod is const
o.ChangeStuff(); // Theoretically illegal because ChangeStuff is not const
class MyObject
{
public int val = 0;
public void SomeMethod() const
{
// Do stuff, but can't mutate due to const declaration.
}
public void ChangeStuff()
{
// Code mutates this instance. Can't call with const reference.
val++;
}
}
Si intende, inoltre, "Perché C++ - stile' const'ness ha implicazioni di vasta portata che sono davvero difficili da fare correttamente (sia dal punto di vista della progettazione e dell'implementazione POV) che per il quale non esiste il supporto di runtime "? È una funzionalità utile, ma davvero costosa. FWIW, F # ha l'approccio opposto: * Nulla * è modificabile a meno che non sia dichiarato come tale. Le interazioni con il framework possono essere non ovvi, però. –
Non sono d'accordo che si tratti di un duplicato esatto. La vecchia domanda chiede come implementarlo nel codice. @spoulson chiede perché non è nel compilatore. –
La correttezza di Const deve essere applicata per essere significativa. Questo diventa difficile quando qualsiasi linguaggio abilitato .NET può consumare i tipi creati da un'altra lingua. Probabilmente ce ne sono quasi un centinaio. La sintassi di tutti questi linguaggi dovrebbe essere modificata per consentire la dichiarazione degli attributi const e dei relativi compilatori ottimizzati per verificarli. In altre parole, la correttezza const è drasticamente non conforme a CLS. –