Hallo,
ich hab ein Problem mit der referenz zur einer Variable.
Ich habe eine Variable (prodData) die ich in eine Funktion übergebe:
using static Programming.FormInterface;
public errorCode programProfinet(ref productionData prodData)
In dieser Funktion möchte ich die Variable in eine andere Variable speichern und gewissen Sachen darin verändern.
productionData prodDataProfinet = new productionData();
prodDataProfinet = prodData;
prodDataProfinet.prodSW = null;
Aber die Basis-Variable prodData wird dabei auch verändert. Kann mir jemand erklären wieso das passiert? Ich mache doch gar nichts mit der Variablen, wieso ist die mit der neuen Variablen verbunden und wie kann ich diese Verbindung aufheben?
Der gezeigte Code ändert nichts an prodData
Dein beschriebenes Verhalten kann durch diesen Code nicht sein. Verwende den Debugger um zu schauen, was wirklich passiert.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Korrektur, weil ich mich verschaut habe:
Du erzeugst eine neue Instanz, überschreibst diese sofort mit prodData und veränderst dann die Eigenschaft. Dein new() hat kein Effekt, sondern Du arbeitest damit eben auf der Referenz von prodData .
Ja - Du änderst damit die bestehende Instanz. So funktionieren Referenztypen.
Reference types - C# Reference - C# | Microsoft Learn
Was du da machst, ergibt keinen Sinn?
Erst instanzierst die Variable prodDataProfinet neu um diese dann mit der Referenz von prodData zu überschreiben.
Dadurch wirfst du die neue Referenz von prodDataProfinet weg und arbeitest du die Zuweisung von prodData zu prodDataProfinet über die gleiche Referenz auf prodData auch wenn du mit prodDataProfinet arbeitest.
Dadurch verändert sich bei der letzten Zeile in prodData auch die prodSW zu Null.
Die Übergabe mit ref kannst du dir sparen, wenn du prodData nicht überschreibst sondern nur die Properties änderst.
Dies wäre nur nötig, wenn du den Parameter auf null setzen willst oder mit einer anderen Instanz/Wert überschreiben willst.
Ist in dem Fall aber nicht zu erkennen!
Nachtrag:
Anbei ist es nicht ratsam für Variablen den gleichen/ähnlichen Namen zu verwenden, wie für Methoden.
Dadurch kommt man beim lesen auch gerne durcheinander.
T-Virus