Laden...

Kann ich ein Dictionary über Klassen hinweg gleich halten?

Erstellt von Frokuss vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.685 Views
F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 6 Jahren
Kann ich ein Dictionary über Klassen hinweg gleich halten?

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

709 Beiträge seit 2008
vor 6 Jahren

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.

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 6 Jahren

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

5.657 Beiträge seit 2006
vor 6 Jahren

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

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 6 Jahren

Alles klar, danke euch beiden.

Gruß Frokuss

5.941 Beiträge seit 2005
vor 6 Jahren

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 6 Jahren

Danke dir Peter. Habs mir grade zu genüge gezogen 😃

Gruß Frokuss