Autor Beitrag
cptjmiller
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 11.10.07 17:44 
Hallo zusammen...

studienbedingt habe ich vor ein paar Wochen mit C# zu programmieren begonnen...
Hab vorher nur mit C/C++ zutun gehabt und war dort ausschließlich auf der Kommandezeilen-Ebene unterwegs...

Nun hab ich meine ersten Spielereien als C#-Konsolenanwendungen hinter mich gebracht und habe mich die Tage nun mal an die Windows-Forms-GUI-Umgebung gewagt...

Muss derzeit nun ein Studien-Projekt erstellen, dass Nichts höchst-komplexes ist...geht eher in Richtung Datenverwaltung und Modifitierung...
Da unser Prof auf KLassendiagramme steht, will er auch, dass sämtliche Daten in Klasseninstanzen gehalten werden, Datenspeicherung in einer Access-Tabelle oder einem DataGrid will er nicht sehen...

Hab nun heute schon mal ein wenig losgebastelt, scheitere nun aber am generellen Strukturieren meines Programms...

Ich hab da eine Mainform-Klasse von Form abgeleitet, die mein Hauptfenster darstellt...dann noch eine weitere Form für ein zweites Fenster, das ich über Button öffnen kann...
Zusätzlich gibts dann noch die program.cs mit dem Application.Run(new Mainform) zum eigentlichen Starten.
Meine Klassendefinitionen habe ich in eine classdef.cs ausgelagert...

Und nun mein Problem..
WO erzeuge ich nun meine Instanzen? Zu Beginn von Mainform funktioniert das ganz gut, kann dann drauf zugreifen...in den anderen Forms komm ich jedoch nicht an die Objekte ran...
Auch wird nicht überall DA, wo ich mein Zeug brauche, das von der Intellisense auch aufgeführt....

Unter C++ konnte ich ja mit include meine Deklarationen einbinden, sowas geht nun nicht mehr, oder?
Wäre es ein reines Konsolenprog würde ich halt alles in eine Datei schreiben, aber in Windows-Anwendungen klappt das so ja auch nicht...

Also...WO gehört in einer GUI-Anwendung WAS hin, wenn ich nun mit Klassen und deren Instanzen arbeite?

Und...noch was dazu: WIE und WO definiere ich eine Art wirklich "globale" Variable, auf die ich innerhalb jeder einzelnen Quellcode-Datei zugreifen kann...


Danke für's Erste...werde Euch die Tage bestimmt noch viele Male löchern...
r2c2
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 324
Erhaltene Danke: 2

Linux

BeitragVerfasst: Fr 12.10.07 07:18 
Hallo cptjmiller,

user profile iconcptjmiller hat folgendes geschrieben:

Meine Klassendefinitionen habe ich in eine classdef.cs ausgelagert...

Erstelle besser pro Klasse eine eigene *.cs-Datei. das ist übersichtlicher...

Zitat:

WO erzeuge ich nun meine Instanzen?

Immer da, wo du sie brauchst... ;-)
Wenn du die Klasse nur in iner Methode brauchst da erzeugen und da auch wieder freigeben(das Freigeben reduziert sich unter .NET auf Ressourcen(Dateihandles, etc.). Den Rest erledigt der GarbageCollector. Oft braucht man sich darum also gar nicht zu kümmern). Ansonsten im Konstruktor einer anderen Klasse erzeugen und ggf. in [s]Destruktor[/s] Finalizer freigeben.

Zitat:

Zu Beginn von Mainform funktioniert das ganz gut, kann dann drauf zugreifen...in den anderen Forms komm ich jedoch nicht an die Objekte ran...

Wenn dus richtig machst schon. Die Klasseninstanz is dann nämlich ein Feld der Klasse. ==> lege eine public property an und greife über die Instanz der Formular-KLasse darauf zu:
ausblenden C#-Quelltext
1:
FormularKlasse.Klasseninstanz.PropertyDerKlassenInstanz = Wert;					


Zitat:

Unter C++ konnte ich ja mit include meine Deklarationen einbinden, sowas geht nun nicht mehr, oder?

Zum Glück, ja. :) Das alles brauchst du nicht mehr. Keine Includes, keine Header-Files, kein Präprozessor, der den Code so umkrempelt, dass man kaum debuggen kann, keine Linker-Errors mehr, weil man irgend n Header falsch eingebunden hat etc.
Du packst einfach alles in den gleichen Namespace und fertig. Keine weitere Arbeit mehr...

Zitat:

Wäre es ein reines Konsolenprog würde ich halt alles in eine Datei schreiben, aber in Windows-Anwendungen klappt das so ja auch nicht...

Logisch kannst du einfach in Dateien schreiben. Noch viel einfacher, als das unter C++ möglich ist...

Zitat:

Und...noch was dazu: WIE und WO definiere ich eine Art wirklich "globale" Variable, auf die ich innerhalb jeder einzelnen Quellcode-Datei zugreifen kann...

Zum Glück ebenfalls gar nicht mehr. Es gibt keine globalen Variablen. C# is ne reine OO-Sprache...

mfg

Christian

_________________
Kaum macht man's richtig, schon klappts!