myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Referenz auf String speichern
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Referenz auf String speichern

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
MadMax1979 MadMax1979 ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.04.2018
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2017


MadMax1979 ist offline

Referenz auf String speichern

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
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!
26.11.2018 17:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 220
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
class ZeichenkettenModel
{
   public string Zeichenkette { get; set; }
}

C#-Code:
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.
26.11.2018 18:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MadMax1979 MadMax1979 ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.04.2018
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2017

Themenstarter Thema begonnen von MadMax1979

MadMax1979 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
26.11.2018 21:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.388
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nur zur Klarstellung: String ist eine Klasse, also ein Referenztyp, verhält sich aber nur wie ein Werttyp, s.a.  [FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik).
27.11.2018 08:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Monate.
Der letzte Beitrag ist älter als 11 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 14.11.2019 06:42