Ich frage mich seit einiger Zeit, warum C# const
auf Klassen- oder Methodenebene nicht unterstützt. Ich weiß, dass Jon Skeet lange Zeit Unterstützung für Unveränderlichkeit gesucht hat, und ich erkläre, dass die Verwendung der C++ - Syntax der Funktion const dabei helfen könnte. Durch Hinzufügen eines const-Schlüsselworts auf Klassenebene hätten wir volle Unterstützung.Warum unterstützt C# nicht const auf Klassen-/Methodenebene?
Jetzt ist meine Frage, was der Grund dafür ist, dass das C# -Team diese Art von Unterstützung nicht entwickelt hat?
Ich könnte mir vorstellen, dass alles mit einer Kompilierzeitprüfung oder durch Attribute erstellt werden kann, ohne die CLR ändern zu müssen. Es macht mir nichts aus, das const-Verhalten durch Reflexion überschreiben zu können.
Stellen Sie sich vor:
const class NumberContainer
{
public int Number { get; }
}
.. Eine solche Klasse nur Bauzeit bevölkert werden könnte, so würden wir einen Konstruktor müssen in einen int zu nehmen.
Ein weiteres Beispiel ist konst auf einem Verfahren Ebene:
public int AddNumbers(NumberContainer n1, NumberContainer n2) const
{
return n1.Number + n2.Number;
}
Konst-Level-Methoden sollten nicht in der Lage seinen Zustand in ihrer eigenen Klasse oder Instanzen von Referenztypen an sie übergeben zu verändern. Außerdem können Funktionen auf Konst-Ebene nur andere Funktionen auf Const-Ebene aufrufen, solange sie sich in ihrem Gültigkeitsbereich befinden.
Ich bin nicht wirklich sicher, ob lambdas und Delegierte alles zu hart (oder unmöglich) machen würden, aber ich bin mir sicher, dass jemand mit mehr Erfahrung in Sprache und Compiler Design mir sagen könnte.
Als Steve B in den Kommentaren darauf hingewiesen, macht die Existenz von readonly
Dinge ein wenig komplexer, als const und readonly
sind in der Nähe derselben während runtime
, aber readonly
Werte können nicht während der Kompilierung Zeit bestimmt werden. Ich denke, wir könnten const
und readonly
Ebene haben, aber das könnte zu verwirrend sein?
Also, was ist der Grund dafür, dies nicht zu implementieren? Bedenken hinsichtlich der Benutzerfreundlichkeit (das Verständnis von Konstanz in C++ ist normalerweise ziemlich schwierig für neue Benutzer), Sprachdesign (nicht machbar) oder einfach nur Prioritäten (die Zeiten des Unveränderlichkeits-Buzz sind vorbei) ..?
behandelt das Schlüsselwort 'readonly' nicht Ihre Anforderung? –
Oups, mein Schlechter .. Ich hatte auch viele Gedanken über readonly, aber vergessen, es zu posten. Wird meinen Gedankenprozess aktualisieren .. – cwap
Sie fragen im Grunde: "Warum hat die Sprache keine Funktion X" - einfach: entweder wurde sie nicht vorgeschlagen + berücksichtigt + genehmigt + bereich + entworfen + implementiert + getestet + dokumentiert + implementiert (abgewogen gegen andere mögliche Anwendungen für diese Ressource, und die Auswirkungen der Sprache aufgebläht), oder * einige * davon wurde in Betracht gezogen und es wurde als unerwünscht oder verzögert zurückgewiesen. Es ist nicht automatisch, dass jede Sprache jedes vorstellbare Merkmal erhält. –