Mögliche Duplizieren:
“const correctness” in C#Warum wurde C# nicht mit 'const' für Variablen und Methoden entworfen?
Ich vermute const
wurde für die allgemeine Sprache Einfachheit für den C# spec vereinfacht. Gab es einen bestimmten Grund, warum wir keine Variablenreferenzen oder Methoden wie const
deklarieren können, wie wir es mit C++ können? Beispiel:
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++;
}
}
Du meint, außer „Weil C++ - Stil' const'ness hat weitreichende Folgen, die wirklich schwer zu Recht zu tun (sowohl in Design und Implementierung POV) und für die es keine Laufzeitunterstützung“? Es ist eine nützliche, aber sehr teure Funktion. FWIW, F # nimmt den umgekehrten Weg: * Nichts * ist änderbar, wenn es nicht als solches deklariert wird. Interaktionen mit dem Framework können jedoch nicht offensichtlich sein. –
Ich stimme nicht zu, dass dies ein exaktes Duplikat ist. Die alte Frage fragt, wie dies im Code implementiert werden kann. @spoulson fragt, warum es nicht im Compiler ist. –
Const Korrektheit muss durchgesetzt werden, um sinnvoll zu sein. Das wird schwierig, wenn eine .NET-fähige Sprache die von einer anderen Sprache erstellten Typen konsumieren kann. Es sind wahrscheinlich fast hundert von ihnen. Die Syntax all dieser Sprachen müsste geändert werden, um const-Attribute zu deklarieren und ihre Compiler zu optimieren, um sie zu verifizieren. Mit anderen Worten, const Korrektheit ist drastisch Nicht-CLS-konform. –