Entwickler-Ecke

C# - Die Sprache - Auslesen und Beschreiben von Struct


C#David - Do 31.05.18 14:10
Titel: Auslesen und Beschreiben von Struct
Hey Leute,

ich möchte Variablen verschiedenen Typs zwischen einzelnen Forms austauschen, dass heißt deren Werte auslesen beziehungsweise ändern. Dazu habe in eine seperate Klasse, in dem Fall "class Functionality" angelegt und darin eine struct "TFTest" deklariert. Deren Member möchte ich nun in Form2 beschreiben und in Form3 auslesen.

Leider muss ich zum Auslesen der Struct-Member in Form3 immer ein neues Objekt der Struct anlegen, womit ja automatisch alle Werte neuinitialisiert werden. Wie kann ich das Problem lösen? Eine Möglichkeit es mit get/set-Properties für structs zu lösen, habe ich leider nicht gefunden. Vielen Dank!


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
namespace Forms_Application
{
  public class Functionality
  {
    public struct TransferTest
    {
      public bool transfertestbool1;
      public int transfertestint1;
      ...
    }
  }

  public partial class Form2 : Form
  {
    private void button1_Click (object sender, EventsArgs e)
    {
       TF_Test _TFTest;
       _TFTest.transfertestbool1 = true;
       _TFTest.transfertestint1 = 1;
       bool gettransfertestint1 = _TFTest.transfertestbool1; //funktionmiert!
    }
  }

  public partial class Form3 : Form
  {
    private void button2_Click (object sender, EventsArgs e)
    {
       //TF_Test _TFTest; //dann Fehlermeldung: "Verwendung des nicht zugewiesenen Feldes...."
       TF_Test _TFTest = new TFTest(); //initalisiert alle Werte neu       
       bool gettransfertestint1 = _TFTest.transfertestbool1; 
    }
  }
}


Christian S. - Do 31.05.18 14:18

Hallo,

bitte füge Deinem Beitrag C#-Tags hinzu, um den Quelltext entsprechend zu markieren.

Danke!


Delete - Do 31.05.18 14:33

- Nachträglich durch die Entwickler-Ecke gelöscht -


C#David - Do 31.05.18 14:45

An der Stelle gibt es sehr wahrscheinlich noch ein Verständnisproblem. Wenn ich einen Konstruktor für die Klasse/Struct erstelle, kann ich doch nur Werte initialisieren und beim Aufrufen nicht abrufen, oder? Besipielcode zum Verständnis wwär super. Vielen Dank!


Delete - Do 31.05.18 14:54

- Nachträglich durch die Entwickler-Ecke gelöscht -


C#David - Do 31.05.18 21:58

Okay....ich habe mir jetzt die Problemstellungen unter den Link http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html) angeschaut. Es scheint mir am sinnvollsten Eine Funktion in der Klasse "Functionality" anzulegen mit der alle Member der Struct beschrieben werden. Indem ich ein Object vom Typ "Funxtionality" an den Konstuktor der aufrufenden Formklasse übergebe, kann ich dann diese Funktion in Form2 und Form3 aufrufen. Nur weis ich immer noch nicht wie man die Werte der Struct dann von Form 2 und 3 auslesen kann. Get/Set-Properties gibt es ja schließlich nicht für structs! Oder sind doch Events die Lösung? Vielen Dank!!...ich bekomme da einfach keine Klarheit rein (:


Ralf Jansen - Do 31.05.18 22:40

Zitat:
Get/Set-Properties gibt es ja schließlich nicht für structs!

Das ist Unsinn. Das Verhalten von structs und classes ist fast identisch. Verwechsele die Bedeutung von structs nicht mit derbedeutung von structs in ganz anderen Sprachen. Der eine entscheidende Unterschied in .Net ist das struct beim zuweisen kopiert (struct = Wertetyp) werden während bei classes ein Verweis auf die gleiche Instanz der Klasse entsteht (class = Referenztyp). Structs wirst du fast nie brauchen. Und wenn du doch ein struct nimmst kannst du dort so ziemlich alle syntaktischen Elemente verwenden wie in einer Klasse. Dir muß nur der Unterschied zwischen Referenz und Wertetyp Verhalten bewusst sein und entscheiden welchen du brauchst.

Hier nimm einfach eine Klasse, instanziiere die irgendwo und übergebe diese Instanz einfach an die Formen die die brauchen. Dann haben alle eine Verweis auf das gleiche Ding und können die benutzen und die Änderungenen von anderen ~sehen~. Events würdest du nehmen um sofort auf Änderungen in der Klasse zu reagieren. Also wenn in Form1 der Inhalt der Klasse geändert wird und in Form2 sofort was passieren soll würdest du Events zusätzlich verwenden.