Const Funktionsparameter in C # [duplizieren]

8
  

Mögliche Duplikate:
Read-only (" const "-ähnliche) Funktionsparameter von C #
Warum gibt es keine Konst-Methode in C # und Const Parameter?

Nachdem ich in C ++ programmiert habe, erinnere ich mich daran, dass wir in einer Methode einen konstanten Referenz / Zeiger-Parameter erzeugen konnten.

Wenn mein Speicher korrekt ist, bedeutet das unten, dass die Methode die Referenz nicht ändern kann und die Referenz selbst eine konstante Referenz ist.

C ++ - Beispiel

%Vor%

Gibt es in C # ein Äquivalent für Methoden in einer Klasse?

Der Grund, warum ich frage, ist, ich versuche, ein Objekt durch Referenz (für Geschwindigkeit) zu übergeben und gleichzeitig möchte niemand, es zu ändern.

    
TheLazyChap 11.06.2012, 14:16
quelle

2 Antworten

10

Es gibt keine Entsprechung für C # und es wurde gefragt viele , viele viele , viele Mal zuvor.

Wenn Sie nicht möchten, dass irgendjemand die "Referenz" ändert oder Sie vielleicht den Inhalt des Objekts meinen, vergewissern Sie sich, dass die Klasse keine öffentlichen Setter oder Methoden zur Mutation der Klasse offen legt. Wenn Sie die Klasse nicht ändern können, implementieren Sie eine Schnittstelle, die die Member nur lesend offenlegt und stattdessen die Schnittstellenreferenz übergibt.

Wenn Sie meinen, dass Sie die Methode daran hindern möchten, die Referenz zu ändern, übergeben Sie die Referenz standardmäßig per Wert, wenn Sie sie "per Referenz" übergeben. Jeder Versuch der Methode, den Verweis auf die Referenz zu ändern, wirkt sich nur auf die Kopie der lokalen Methode und nicht auf die Kopie des Aufrufers aus. Dies kann geändert werden, indem das Schlüsselwort ref für einen Referenztyp verwendet wird. An diesem Punkt kann die Methode den Verweis auf ein neues zugrunde liegendes Objekt zeigen und wird den Aufrufer beeinflussen .

    
Adam Houldsworth 11.06.2012, 14:19
quelle
1

Bei Werttypen ( int , double , byte , char , ..., struct ) werden die Argumente als Werte eingegeben und wirken sich daher nicht auf das aufrufende Modul aus.

Für string type, obwohl es ein Referenztyp ist, ist es durch die CLR unveränderlich, sodass nichts, was Sie innerhalb der Prozedur tun, die ursprüngliche Zeichenfolge beeinflussen kann.

Für andere Referenztypen ( class ) gibt es keine Möglichkeit, Änderungen in der Klasse durch die Methode zu garantieren.

    
ja72 11.06.2012 14:30
quelle

Tags und Links