Laden...

Referenz auf String speichern

Erstellt von MadMax1979 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.055 Views
M
MadMax1979 Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren
Referenz auf String speichern

Hallo zusammen,

ich habe mit Visual Studio 2017 C# ein Hauptfenster erstellt, in dem eine Zeichenkette als string gespeichert ist. Dieser String soll dann an ein neu öffnendes Dialogfenster übergeben werden, wo der String eventuell verändert werden muss.

Mit einer Wert-Übergabe an den Konstruktor des Dialogfensters und anschließend wieder zurück funktioniert das generell gut.

Jetzt wollte ich aber ein wenig "Schönheit der Arbeit" betreiben, und lediglich eine Referenz auf den string übergeben, so dass das Dialogfenster die nötigen Änderungen direkt an der Variablen des Hauptfensters vornehmen kann ...

Es ist mir problemlos gelungen, die Referenz an den Konstruktor des Dialogfensters zu übergeben. Allerdings sollen die Änderungen an dem String erst kurz vorm Schließen des Fensters vorgenommen werden. Die Idee war somit, die übergebene Referenz als Zeiger zwischenzuspeichern, so dass andere Funktionen später darauf zugreifen können. Dieses "Zwischenspeichern" der Refernz gelingt mir aber irgendwie nicht ...

Der stark vereinfachte Code des Dialogfensters verdeutlicht mein Vorhaben vielleicht etwas besser:

public partial class Testfenster : Form    
{
        private ref string KopieReferenz;            //<-- Speicherung der Referenz

        public Testfenster(ref string Zeichenkette)
        {
             InitializeComponent();
            
             ref Kopiereferenz = ref Zeichenkette;      //<-- funktioniert nicht
        }

        private void CmdExit_Click(object sender, EventArgs e)
        {
             KopieReferenz = "Test";
             Close();
        }
}

Hat jemand von Euch eine Idee, ob so etwas überhaupt in C# umsetzbar ist?

Vielen Dank!

P
441 Beiträge seit 2014
vor 5 Jahren

Hi,

das hat etwas mit dem Unterschied von Referenz- und Werttypen zu tun. Für Werttypen, wie string einer ist, ist es einfach nicht vorgesehen soetwas zu machen.

Die einfachste Möglichkeit genau das zu erreichen, was du dort vorhast, ist mit einer Model Klasse zu arbeiten:


class ZeichenkettenModel 
{
   public string Zeichenkette { get; set; }
}


ZeichenkettenModel test = new ZeichenkettenModel();
test.Zeichenkette = "Hallo";

// Aufruf
new Testfenster(test);

Damit hast du eine Referenz, mit der du arbeiten kannst. Solltest du die Klasse dann noch einmal erweitern musst du nicht nicht einmal groß etwas erfinden um das zu tun - was bei der Übergabe von einem String allerdings notwendig wäre.

M
MadMax1979 Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren

Hallo Papst,

vielen Dank für Deine Antwort!

Da habe ich den Wald wohl irgendwie vor lauter Bäumen nicht gesehen und war etwas verbohrt in die Idee mit der zu speichernden Referenz. Die Kapselung des Strings in eine kleine Klasse ist ein gute Lösung!

Viele Grüße