Autor Beitrag
HoPPeL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Do 03.02.11 14:50 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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 www.vtk.org/ aufgebaut :)

mfg
HoPPeL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: 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