[gelöst] Datenaustausch mit Strukturen oder Klassen
-
Die Anwendung ist aufgeteilt in:
MainPage.xaml.cs (Benutzeroberfläche)
Class1.cs (Berechnungsmodule)Bisher übergebe ich die Benutzereingaben einzeln an Class1 und hole mir die Berechnungsergebnisse wieder einzeln aus Class1. Dafür sind eine Reihe Member-Funktionen erforderlich. Das läuft soweit einwandfrei.
Nun möchte ich die einzelnen Werte (Eingaben und Ergebnisse) übersichtlicher in eine Struktur oder eine Klasse packen, die der Datenkommunikation dienen soll. Ich hatte versucht, dafür eine weitere Klasse in Class2.cs anzulegen. Hier gibt es jedoch Probleme. Der Compiler verlangt jeweils mit new ein Objekt anzulegen, doch damit gibt es zwei unterschiedliche Instanzen der Daten und nichts ist mit dem gewünschten Datenaustausch.
Frage: geht das überhaupt mit einer gemeinsamen Instanz und wenn ja, wie? Anderenfalls lasse ich die Dinge wie sie laufen.
Eingesetzt wird Visual Studio Express C# 2010 für Windows Phone.
-
berniebutt schrieb:
Der Compiler verlangt jeweils mit new ein Objekt anzulegen, doch damit gibt es zwei unterschiedliche Instanzen der Daten und nichts ist mit dem gewünschten Datenaustausch.
Irgendwas verheimlichst Du uns.
Code oder ausführliche Problembeschreibung.
-
Hier einmal rudimentär die vorbereitete Klasse Daten in Class2.cs für die Bereitstellung der Daten;
public class Daten { public int I1; // Eingabe public int I2; // Eingabe public int E; // Ausgabe public Daten() // Konstructor { } public int i1 { get { return this.I1; } set { this.I1 = value; } } public int i2 { get { return this.I2; } set { this.I2 = value; } } public int e { get { return this.E; } set { this.E = value; } } }
In MainPage.xaml.cs sollen die Eingaben gesetzt und das Ergebnis geholt werden.
Dafür erfolgt dort:Daten daten; // die Daten (Class2.cs) Berechnung berechung; // Berechnungsmodule (Class1.cs) int i1 = 10; int i2 = 20; int e = 0; ... daten = new Daten(); // Instanz von Daten (Class2.cs) berechnung = new Berechung(); // Instanz von Berechnung (Class1.cs) ... daten.i1 = i1 daten.i2 = i2; berechnung.Result(); // Berechnung durchführen (z.B. e = i1 + i2) e = daten.e; // so soll das Ergebnis kommen
Die Berechnung des (evtl. aufwendigen) Ergebnisses daten.e soll in der Klasse Berechnen in Class1.cs erfolgen über eine Berechnungsmethode Result.
Vielleicht ist der Ansatz zu kompliziert? Ich möchte aber gerne Anwendung - Daten - Berechnung strikt auf verschiedene Dateien verteilen, um Erweiterungen so einfach wie möglich zu halten.
-
berniebutt schrieb:
Ich möchte aber gerne Anwendung - Daten - Berechnung strikt auf verschiedene Dateien verteilen, um Erweiterungen so einfach wie möglich zu halten.
Die Trennung von Daten und Berechnung bricht aber komplett mit dem OOP-Konzept der Kapselung von Daten. Dein Ansatz erzeugt den Anschein das Du dieses Grundkonzept von OOP noch nicht verstanden hast.
-
Es geht inzwischen einwandfrei mit der Lösung:
--> Main legt mit daten = new Daten() die Daten-Klasse an
--> Main legt mit berechnung = new Berechnung(daten) die Berechnungs-Klasse an und übergibt die Dateninstanz an einen Konstruktor zur weiteren Verwendung
--> Die Daten-Klasse verwaltet jetzt nur die Daten
--> Jetzt erfolgen die Zugriffe in Main und Berechnung in beide Richtungen als Werte mit daten.i1, daten.i2, daten.eIch denke, das kann man so lassen. Das Programm wird deutlich übersichtlicher und leicht erweiterbar. Das Konzept von OOP bleibt gewahrt, es handelt sich nur um wenige öffentliche Daten (etwa 10) zur Ein- und Ausgabe. In C hatte man dafür eine globale Struktur. Kann man brauchen, auch wenn man OOP verstanden hat.