Guten Tag zusammen 😃
ich habe da ein verständnisproblem mit den Referenzen. Das ist ja quasi soetwas wie Pointer?
Und zwar habe ich einen Dictionary, den ich über mehrere WinForms benutze, der aber immer gleich sein soll. Daher wenn ich beim Dictionary etwas verändere, muss/sollte das ganze auch bei den anderen Fenstern so sein (zumindestens im Dictionary, das Interface müsste ich vermutlich eh manuell anpassen).
Beispiel-Code (nicht kopiert):
public class Fenster_A{
Dictionary<int, object> para1 = new Dictionary<int, object>();
public Fenster_A(){
Fenster_B b = new Fenster_B(ref para1);//Das würde bei mir eigentlich durch ein Event ausgelöst
b.Show();
}
}
public class Fenster_B{
Dictionary<int, object> para1;
public Fenster_B(ref Dictionary<int, object> para1){
this.para1 = para1;
}
}
Habe ich das jetzt richtig verstanden, dass nun beide Fenster sich die Ressource teilen? Oder mache ich damit irgendetwas komisches?
Kann mir vielleicht auch einer sagenn, wofür man eigentlich in und out braucht?
Wäre super cool. Besten Gruß
Frokuss
Nachträge: Fehler korrigiert
Hallo Frokuss,
da es sich beim Dictionary um einen Verweistypen handelt, musst du das nicht direkt per ref
übergeben. Das wäre nur der Fall, wenn du innerhalb von Fenster_B
der Variablen para1
aus Fenster_A
einen neuen Wert zuweisen möchtest. Willst du hingegen nur, dass der Inhalt gleich ist, dann reicht es auch ohne ref
aus, da es sich dann zwar um verschiedene Variablen handelt, diese jedoch beide auf das selbe Objekt verweisen.
Cool, danke dir pinki 😃
das heißt ich könnte die beiden "ref"s weglassen. Und wenn ich dann in Fenster_B ein para1.Add(1, new object()) mache, wäre das trotzdem auch in Fenster_A vorhanden?
Gruß Frokuss
Hi Frokuss,
Habe ich das jetzt richtig verstanden, dass nun beide Fenster sich die Ressource teilen?
Ja, aber das hat nichts mit dem ref
-Schlüsselwort zu tun, sondern damit, daß die Dictionary-Klasse ein Verweistyp ist.
Kann mir vielleicht auch einer sagenn, wofür man eigentlich in und out braucht?
Ein typischer Anwendungsfall sind die TryParse-Methoden der Datentypen int, decimal, DateTime etc., also wenn man z.B. in einer Methode mehrere Rückgabewerte hat.
das heißt ich könnte die beiden "ref"s weglassen
Ja
Weeks of programming can save you hours of planning
Hallo Frokuss
Zu out / ref kriegst du hier ausführlichere Informationen :
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011