Entwickler-Ecke
C# - Die Sprache - Frage zum sauberen Programmieren
HoPPeL - Do 03.02.11 14:50
Titel: Frage zum sauberen Programmieren
hiho,
hab da mal eine Frage, wie man möglichst sauber eine eigene Klasse schreibt.
Ich mache es folgendermaßen:
Habe sogut wie alles Variablen, die in den methoden verwand werden als Klassenvariablen deklariert.
wenn ich also Methoden aufrufe, geschieht dies meistens ohne Argumente sondern ich nehm einfach die globalen Variablen.
Macht man das so, oder doch lieber über rückgabewerte und argumente?
Weiterhin benutze ich viele Klassenmethoden und Variablen in der form. Einige methoden setzen andere vorraus, damit ich keine Nullreference bekomme.
Sollte ich also eine Initialiserungsmethode machen, wo ich schon mal alle Objekte erzeuge?
oder lieber mit if abfragen gucken obs das objekt gibt.
Weiterhin habe ich in form1 ein control, dass ich auf eine Klassenvariable lege:
C#-Quelltext
1: 2:
| Operations.RenderWindow = this.vtkcontrol1.GetRenderWindow(); Operations.RenderWindow.Render(); |
das mache ich in form 1 bestimmt 20 mal... gibt da einen schöneren weg?
vllt hatauch jemand einen links mit ein paar tipps zum sauberen Programmieren, bin für jede Hilfe dankbar :)
mfg
Th69 - Do 03.02.11 15:23
Hallo,
also deine Klassenbeschreibung hört sich schon mal nicht so gut an...
Du solltest nur die Variablen als Member (Felder) einer Klasse deklarieren, welche einen Status der Klasse darstellen (d.h. konsistent über mehrere Methodenaufrufe sein sollen).
Methoden sollten selbstverständlich mit entsprechenden Parametern (Argumenten) und Rückgabewerten definiert werden (generell sollten Variablen so lokal wie möglich sein).
Und bzgl. deines konkreten Beispiels:
Solange sich das RenderWindow nicht ändert, könntest du dieses allerdings als Klassenmember anlegen (d.h. direkt im Konstruktor der Klasse bzw. im Form.Load-Ereignis).
Zum Initialisieren von Variablen beim erstmaligen Zugriff könntest du auch Eigenschaften (Properties) benutzen, z.B.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| RenderWindow RenderWindow { get { if (renderWindow == null) renderWindow = this.vtkcontrol1.GetRenderWindow();
return renderWindow; } }
private RenderWindow renderWindow; |
(nicht verwirren lassen, daß ich als Typ und Name zweimal denselben Bezeichner "RenderWindow" benutzt habe - ich kenne ja den genauen Typ deiner RenderWindow-Klasse nicht ;-)
P.S. Was ist denn Operations überhaupt für eine Klasse?
HoPPeL - Fr 11.02.11 16:36
Hi,
sorry fürs späte antworten... bin bissle im Prüfungsstress :)
Danke für deine Tipps, werde meine Klasse mal bissle aufräumen
Denke, aber dass es fast schon nicht andres geht mit den ganzen klassenvariablen... brauch die in vielen methoden
Das ganze ist ne klasse, die verschiedene grafische Operationen durchführt, lade ein Bild, welches ich dann z.B im dreidimensionalen Raum darstelle etc...
Ist alles aufm
http://www.vtk.org/ aufgebaut :)
mfg
HoPPeL - Fr 11.02.11 18:16
wahrscheinlich bin ich einfach nur zu müde, aber ich bekomm das mit diesen Properties nicht hin :/
Hab mal bisschen herrumprobiert mit deinem Code, aber so richtig komme ich nicht dahinter...
der Code muss doch in meine form1
da bekomme ich jedoch immer folgenden Fehler" Einer Eigenschaft oder einem Indexer "WindowsFormsApplication2.Form1.RenderWindow" kann nichts zugewiesen werden -- sie sind schreibgeschützt"...
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!