C # hat die Schlüsselwörter out
und ref
. Warum werden diese beiden benötigt? Haftungsausschluss: Ich habe keine fundierten Kenntnisse in C #.
c#
parameters
keywords
Neo
quelle
quelle
ref
undout
? Oder fragen Sie sich, wie die Verwendung von Argumenten mit Bezug aufref
/out
im Vergleich zu Argumenten mit Bezug auf / (kein Modifikator für den Parameter) ist? Oder beides?Antworten:
In Bezug auf die Implementierung sind sie im Wesentlichen dasselbe,
out
kommunizieren jedoch etwas, wasref
nicht der Fall ist: Sie interessieren sich nicht für Eingaben. Dies bedeutet bestimmte Dinge für Sie und für das Werkzeug. Sie können beispielsweise eine nicht initialisierte Variable an einenout
Parameter übergeben, und dies ist kein Problem, wo dies sonst der Fall wäre. Innerhalb der Funktion müssen Sie demout
Parameter einen Wert zuweisen, bevor er zurückgegeben wird, wohingegen es nicht erforderlich ist, etwas zu tun alle mit einemref
Wert.quelle
out
gibt ihm eine Möglichkeit, dies zu tun, die besser dazu passt, wie Sie mit den Variablen umgehen möchten.out
Parameter zu übergeben, da die empfangende Funktion ihn nicht lesen wird .Um diese beiden Schlüsselwörter zu verstehen, müssen Sie verstehen, was das Übergeben eines Werts als Referenz bedeutet. Im Wesentlichen bedeutet dies, dass wenn Sie die in der Methode oder Funktion übergebene Parametervariable ändern , diese Variable ihren geänderten Wert behält, wenn Ihre Funktion beendet wird. Wenn Sie einen Parameter als deklarieren
ref
oderout
dies ausführen , behält eine normale Parametervariable ihren ursprünglichen Wert bei, auch wenn Sie ihn in der Funktion geändert haben.Der einzige Unterschied zwischen
ref
undout
besteht darin, dassout
Sie die Variable nicht initialisieren müssen, bevor Sie sie an die Funktion übergebenref
. währendout
tut man etwas auf die Variable innerhalb der Funktion zuweisen erfordern, aberref
nicht der Fall.quelle
Du hast gefragt.
Und die Antwort ist, dass sie nicht ERFORDERLICH sind, Java hat zum Beispiel auch nicht und VB hat nur ref (und benötigt es nur in der Methodendeklaration).
Sie können problemlos ein gesamtes Programm schreiben, ohne eines von beiden zu verwenden.
Sie existieren, weil sie gelegentlich nützlich sind. Aus diesem Grund gibt es zwei und nicht nur einen - denn es ist nützlich, zu unterscheiden zwischen "Hier ist etwas, ändern Sie es, wenn Sie möchten" und "Geben Sie diesem Ding einen neuen Wert".
Andere Sprachen haben andere Prioritäten und können diese oder gleichwertige enthalten oder auch nicht. Sie können sich sogar nicht darüber einig sein, ob eines von beiden nützlich ist, und können sich daher aktiv dafür entscheiden, das eine oder das andere NICHT zu implementieren.
quelle
In ihrem Kern beide
ref
undout
bietet einen Mechanismus für das Bestehen der Adresse einer Variablen auf ein Verfahren , so dass es aktualisiert werden kann - die Zuordnung zu derref
oderout
Parametern aktualisieren die Variable im Kontext des Anrufers. Wo sie sich unterscheiden, ist in den Garantien:out
Garantiert, dass die Variable aktualisiert wird,ref
nicht.Auf der anderen Seite des Anrufs gibt es ähnliche Unterschiede. Es
out
ist nicht garantiert, dass ein Parameter unserer Methode bei der Ankunft irgendetwas Nützliches enthält, und er muss irgendwann auf einen Wert gesetzt werden, während aref
davon ausgegangen werden kann, dass Parameter einen Wert hat, und wir müssen nichts Spezifisches damit tun.Dieser Unterschied wirkt sich auf die Code-Analyse, -Erstellung und -Optimierung aus, die zwar für uns die meiste Zeit nicht so offensichtlich ist, sich jedoch auf die Funktionsweise unserer Programme auswirken kann. Der Codegenerator kann die Zuweisung der Variablen bis unmittelbar vor dem Aufruf aufschieben. Der Optimierer entscheidet möglicherweise, dass er bestimmte Vorgänge auf der Grundlage des Vertrags usw. effektiver neu anordnen kann.
In Bezug auf die Verwendung: In der Regel verwende ich diese
out
Option in Situationen, in denen mir der Inhalt der Variablen nicht wichtig ist, wenn sie als Parameter eingeht undref
wenn ich dies tue.quelle