GELÖST Instanzen von Klasse im ganzen Projekt zur verfügung haben

Diskutiere Instanzen von Klasse im ganzen Projekt zur verfügung haben im Programmierung Forum im Bereich Software Forum; Hallo Ich arbeite mit Microsoft Visuals C# Express. Nun habe ich eine Anwendung welche ein Ladefenster hat. In diesem werden die Daten ausgewählt...
M

minder

Gast
Hallo

Ich arbeite mit Microsoft Visuals C# Express. Nun habe ich eine Anwendung welche ein Ladefenster hat. In diesem werden die Daten ausgewählt und in eine datentable gelsen. Danach wird für jede Zeile in der Datentabel eine Instanz der Klasse Aktien erstellt. Nun meine Frage:
Wie kann ich diese Instanzen (sind in einem array gespeicher) im ganzen Projekt zur verfügung stellen?
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Also normalerweise sollte gerade die objektorientierte Programmierung sowas verhindern. Globale Variablen sind nicht mit einer guten Softwarearchitektur vereinbar.

Du kannst zwar eine Klasse statisch machen, so dass jede andere Klasse darauf zugreifen kann, aber das ist gerade bei Datenklassen ziemlich unsauber.

Es wäre nicht schlecht zu erfahren wie du dein Programm aufgebaut hast. (Datenbankanwendungen haben ja meist mehrere Layer.)

Du wirst ja eine Klasse haben, die dieses Array (Wieso verwendest du keine generische Liste?!?!) hält. Dann würde ich sagen, dass du dieser Klase eine Methode oder einen Indexer gibst, der Zugriff auf dieses Array gibt. Den Klassen die diese Datenklasse dann verwenden, musst du dann nur eine Referenz davon geben.
 
M

minder

Gast
Ich hab mehrere Forms -> Startbildschirm -> Laden -> Gamebildschirm

Jetzt habe ich die Daten die ich gespeichert habe in einer csv datei. Diese werden dann in eine Datatable gespeichert. Danach wird jede Zeile in eine neue Instanze der Klasse Aktien geladen also habe ich danach ein array mit z.B. 50 klassen die darin sind. Nun müsste ich ja nur einen Zeiger auf das Array übergeben oder nicht?
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Ja, davon hätte ich ja gesprochen. Es reicht wenn die anderen Klassen eine Referenz auf die Klasse haben, die diese Daten verwaltet. (Referenzen sind mit Zeigern vergleichbar.) Wenn alle Klassen auf die selbe Instanz zugreifen, liegt die Datenklasse auch nur einmal im Speicher.

Die Datenklasse kann dann die Daten mit einem Indexer oder mit Getter und Setter bereitstellen. Das ganze Array muss gar nicht übergeben werden.

Noch ein paar Anmerkungen:
-Wenn du den XMLWriter bzw. XMLReader verwendest, kannst du das ganze Array ganz leicht in eine XML-Datei serialisieren. Generell würde ich XML einer CSV-Datei vorziehen.

-Verwende lieber die generische Liste, anstatt eines Arrays. Ein Array ist nicht typsicher eine generische Liste aber schon. Außerdem lässt sich eine generische Liste leichter mit ForEach verarbeiten.
 
M

minder

Gast
foreach hab ich noch nie so genau begriffen:D

Danke
 
Zuletzt bearbeitet:
B

BitKiller

Mitglied seit
18.07.2007
Beiträge
365
Standort
Paderborn
foreach hab ich noch nie so genau begriffen:D

Danke


Habs so gemacht

game game = new game(ref arr_aktien);
game.ShowDialog();

public game(ref aktien[] arr_aktie)
{
InitializeComponent();
}

leider kommt volgende Meldung:
¨Fehler 1 Inkonsistenter Zugriff: Parametertyp "ref Wirtschaftssimulator.aktien[]" ist weniger zugreifbar als Methode "Wirtschaftssimulator.game.game(ref Wirtschaftssimulator.aktien[])" C:\Users\nanohack\Documents\Visual Studio 2008\Projects\Wirtschaftssimulator\Wirtschaftssimulator\game.cs 15 16 Wirtschaftssimulator
Die Fehlermeldung kommt daher, dass die Methode nicht public ist.

So, jetzt mal zum Design:
Datenbankverbindungen und Datenhaltungsklassen am besten immer als Singleton. Von diesem Singleton gibst du dann ne instanz zurück.
In der Klasse dann ne generische Liste, die du mit nem getter zurückgibst.

Und wegen der foreach-Schleife:

foreach (String s in stringList)
{
hier ist s dann dein zu behandelknder String aus der Liste
}

Vorteil von Listen:
Sie sind nicht auf eine Größe festgelegt. Mit .Add() oder .AddRange() kannst du jederzeit was hinzufügen, bei nem Array musst du beim Initialisieren ja die Größe festlegen
 
M

minder

Gast
Ich hab mir noch überlegt ich könnte das ganze über eine datenbank oder so machen. Jedes fenster greift einfach auf die Datenbanz zu?
 
B

BitKiller

Mitglied seit
18.07.2007
Beiträge
365
Standort
Paderborn
Ich hab mir noch überlegt ich könnte das ganze über eine datenbank oder so machen. Jedes fenster greift einfach auf die Datenbanz zu?
das macht man nicht. ne datenhaltungsklasse als singleton, die auf die datenbank zugreift, und jedes fenster greift auf die datenhaltungsklasse zu
 
M

minder

Gast
Ich hab eben zuerst mit c++ gearbeitet. Danach habe ich mit c# angefangen. Singletons kenn ich bis jetzt nur aus c++.
Ich speichere ja die einzelnen instanzen von der Klass in einem array. Wenn ich es jetzt mit einem Singleton mache, brauche ich kein array mehr?
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Sehe ich auch so wie BitKiller. Allerdings gehe ich mal davon aus, dass dir Design Patterns wie Singleton nichts sagen, wenn du die ForEach-Schleife bisher nicht verstanden hast.

Wenn du nicht mehr zu speichern hast, dann verwende lieber keine Datenbank. Eine Datenbankanwendung wäre wahrscheinlich für die Datenmenge übertrieben. Außerdem sollte man hier mehrere Layer erstellen und etwas mehr Erfahrung mit Softwarearchitektur haben.

Wie ich bereits beschrieben habe solltest du auch die generische Liste einem Array vorziehen. Wenn du dich nicht damit und der ForEach-Schleife auskennst, solltest du dich auf jeden Fall darüber informieren. Als Programmierer sollte man sich auf keinen Fall Funktionen die man nicht versteht verschließen.

Was mir noch aufgefallen ist: Du solltest Datenklassen IMMER von der Oberfläche (Formulare) trennen. Erstelle lieber eine Klassendatei die deine Daten lädt und dann für die Oberfläche und die anderen Klassen bereitstellt.

EDIT:
Sorry, dein letzter Post war noch nicht da als ich das geschrieben habe. Wenn du vorher in C++ programmiert hast, dann solltest du dich ja auch mit generischen Datentypen auskennen. Auf jeden Fall solltest du dich umgewöhnen. C# ist zwar ähnlich in seiner Syntax, hat aber im Detail viele Unterschiede. Ein Buch wäre sicher ziemlich hilfreich.
 
M

minder

Gast
Danke werd mich mal drüber informieren
 
H

h3r3tic

Mitglied seit
14.02.2004
Beiträge
831
Alter
38
Standort
Berlin
Hi also das was du suchst hört sich eindeutig nach einem Singelton an. Wie schon vorher erwähnt.

Singelton ist dabei nicht auf eine Programmiersprache bezogen sondern ein Entwurfsmuster.
Wikipedia bietet da einen guten Artikel inklusive einer Beispielimplementierung in C# http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)
 
Thema:

Instanzen von Klasse im ganzen Projekt zur verfügung haben

Sucheingaben

c# inkonsistenter zugriff

Instanzen von Klasse im ganzen Projekt zur verfügung haben - Ähnliche Themen

  • Unter welchen Voraussetzungen startet Windows 7 unendlich CMD-Instanzen?

    Unter welchen Voraussetzungen startet Windows 7 unendlich CMD-Instanzen?: Mir ist aufgefallen, dass eine Batch-Datei mit folgendem Code ein CMD-Fenster nach dem nächsten aufruft, in Endlosschleife: start winver Bei...
  • Mehrere Instanzen einer Anwendung in der Windows Taskleiste nicht in Gruppen anzeigen lassen

    Mehrere Instanzen einer Anwendung in der Windows Taskleiste nicht in Gruppen anzeigen lassen: Wer ein Programm mehrmals öffnet sieht dies in der Taskleiste anhand von gruppierten Icons und man sieht nicht immer direkt wie viele Instanzen...
  • Objektverweis wurde nicht auf eine Instanz festgelegt - Druckertreiber

    Objektverweis wurde nicht auf eine Instanz festgelegt - Druckertreiber: Kurz und knapp: Mein Problem wurde bereits in diesem thread beschrieben, jedoch leider nicht abschließend beantwortet. Dependency Walker habe ich...
  • Microsofts Azure-Cloud in Lv2-Instanz ab sofort mit EPYC-CPUs von AMD erhältlich

    Microsofts Azure-Cloud in Lv2-Instanz ab sofort mit EPYC-CPUs von AMD erhältlich: In den vergangenen Jahren war der Server-Markt aufgrund fehlender Konkurrenz zu 99 Prozent von Intel-CPUs geprägt. Jetzt haben AMD und Microsoft...
  • Tastatur-Shortcut zum wechseln zwischen mehreren offenen Instanzen eines Programms

    Tastatur-Shortcut zum wechseln zwischen mehreren offenen Instanzen eines Programms: In Ubuntu-Gnome 17.04 gibt es Tastatur-Shortcuts, um zwischen mehreren offenen Instanzen eines Programms hin und her zu wechseln. Die...
  • Ähnliche Themen

    Oben