C # stellt das Schlüsselwort refund bereit out, um Argumente als Referenz zu übergeben. Die Semantik der beiden ist sehr ähnlich. Der einzige Unterschied besteht in der Initialisierung der Flaged Variable:
referfordert, dass die Variable initialisiert wird, bevor sie an die Funktion übergeben wird,outnicht.outerfordert, dass die Variable innerhalb der Funktion initialisiert wird,refnicht.
Die Verwendungsfälle dieser beiden Schlüsselwörter sind auch fast gleich, und ihre zu häufige Verwendung wird meines Erachtens als Codegeruch angesehen (obwohl es gültige Verwendungsfälle wie die TryParseund TryGetValueMuster gibt).
Könnte aus diesem Grund jemand erklären, warum es in C # zwei sehr ähnliche Tools für so enge Anwendungsfälle gibt?
Unter MSDN wird außerdem angegeben, dass sie ein unterschiedliches Laufzeitverhalten aufweisen:
Obwohl die Schlüsselwörter ref und out ein unterschiedliches Laufzeitverhalten verursachen, werden sie beim Kompilieren nicht als Teil der Methodensignatur betrachtet.
Wie unterscheidet sich ihr Laufzeitverhalten?
Fazit
Beide Antworten sehen richtig aus, danke euch beiden. Ich habe die von jmoreno akzeptiert , weil sie expliziter ist.
refin C ++ implementiert . auf Zeiger auf den fraglichen Objektzeiger (oder das fragliche Grundelement). dhInt32.TryParse(myStr, out myInt)(C #) wird auf die gleiche Weise wieint32_tryParse(myStr, &myInt)(C) "ausgeführt" ; Der einzige Unterschied sind einige Einschränkungen, die vom Compiler erzwungen werden, um Fehler zu vermeiden. (Ich werde dies nicht als Antwort posten, weil ich mich vielleicht irre, wie dies hinter den Kulissen funktioniert, aber ich stelle mir das so vor [weil es Sinn macht])