2010-09-26 11 views
34

In C++ können Sie eine konstante Methode, wie so definieren:Konst Methoden in C#

int func_that_does_not_modify_this(int arg) const {} 

Platzierung const am Ende der Funktion verhindert, dass Sie versehentlich eine der internen Eigenschaften ändern, und lässt den Anrufer wissen dass diese Funktion das Objekt nicht verändert.

Gibt es ein solches Konzept in C#?

Antwort

42

Nein, in C# gibt es nichts Vergleichbares. Es wurde viel darüber geredet, aber es ist ziemlich schwierig, const so zu arbeiten, dass es zur Kompilierzeit verifizierbar ist, nicht weggeworfen werden kann wie in C++ und immer noch relativ einfach zu benutzen ist ohne alle Sie müssen es perfekt machen, wenn sie ihren eigenen Unterricht gestalten.

Natürlich, wenn Sie Ihre eigenen Typen als unveränderlich (wie string) entwerfen, dann sind alle Instanz Methoden auf sie effektiv const. Dies ist nicht immer praktisch, aber es ist eine wichtige Technik, die Sie gegebenenfalls verwenden können.

8

Nein. In C# ist nichts Ähnliches.

Nein const & entweder.

Wie Jon hervorhebt, kann man natürlich eine const-Methode implementieren, aber es gibt keinen anderen Weg als die Dokumentation, um dem Aufrufer mitzuteilen, dass eine Methode const ist.

11

Code Contract sollte eine solche Funktion in der Zukunft bieten. Zurzeit können Sie eine Methode als [Pure] markieren, was bedeutet, dass sie keine Nebenwirkungen hat (d. H. Keine der Klassenmitglieder verändert). Leider erzwingt die aktuelle Version der Tools diese Regel nicht, daher dient die Verwendung dieses Attributs nur zu Dokumentationszwecken. Ich bin mir ziemlich sicher, dass es in der zukünftigen Version durch statische Analyse (d. H. Zur Kompilierungszeit) erzwungen wird, zumindest deutet das die Dokumentation an.

Verwandte SO Fragen: Pure functions in C#

+0

Das wäre nett :) – mpen