4 Stimmen

C#: macht die Verwendung von ref/out für einen Methodenparameter einen Unterschied, wenn eine Objektvariable übergeben wird?

Mögliches Duplikat:
Vorbeifahrt am Schiedsrichter und Ausfahrt

C#: macht die Verwendung von ref/out für einen Methodenparameter einen Unterschied, wenn eine Objektvariable übergeben wird?

In C# übergibt eine Objektvariable nur eine Referenz an die Methode, d. h. sie ist bereits ein ref/out-Parameter. Ist dies korrekt?

2voto

Jaroslav Jandek Punkte 9303

Die Instanz wird als Referenz übergeben. Der Zeiger auf die Instanz wird jedoch als Wert übergeben.

Wenn Sie ref wird der Zeiger auch als Referenz übergeben - Sie können also verwenden:

private void CustomDispose(ref object x) { x.Dispose(); x = null; }

CustomDispose(ref someInstance.someField);

wird das Feld von someInstance auf null gesetzt. Dies kann z.B. beim Disposing über eine benutzerdefinierte Methode nützlich sein.

1voto

Henk Holterman Punkte 249753

Um den ersten Teil Ihrer Frage zu bestätigen:

  • Beim Umgang mit einem Objekt (Instanz) in .NET haben Sie es immer mit 2 Entitäten zu tun: dem eigentlichen, anonymen Objekt und dem benannten Verweis auf dieses Objekt. Dieser Verweis ist ein Feld, eine Variable oder ein Parameter.

  • Sie können die Objektinstanz überhaupt nicht als Parameter übergeben, sondern nur den Verweis.

  • Sie können einen Verweis per Referenz übergeben, d.h. Sie können ihn an eine andere Stelle verweisen lassen

    void SetNull(ref MyObject parameter)
    { parameter = null; // would make no sense w/o the ref }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X