Einzelnen Beitrag anzeigen
Alt 21.05.2015, 14:25   #2 (permalink)
Exit
Blödmarktkundenberater
 
Benutzerbild von Exit
 

Registriert seit: 10.04.2002
Beiträge: 10.661

Exit hat eine strahlende Zukunft
Exit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende Zukunft

Standard AW: Wie kann ich den Code optimieren?

1. ScrollingBackground erbt von Flugzeug
Der Sinnzusammenhang erschließt sich mir nicht wirklich.

Du solltest hier überlegen, ob ScrollingBackground ein Flugzeug ist ("Ist ein" - Beziehung = erben) oder ob es eine Property Flugzeug (vielleicht sogar "Flugzeuge") hat.

Vererbung sollte man grundsätzlich möglichst sparsam einsetzen, da sich darauf spätestens beim Refactoring diverse Probleme ergeben können.

2. Alles erbt von Form?
Scheint ein ähnliches "erben" Problem zu sein, zumindest wenn mit "Form" System.Windows.Forms.Form gemeint ist. Theoretisch würde ich eigentlich nur 1 Form (=Windows Formular Fenster) erwarten, in dem dann der Inhalt dargestellt wird.

3. "null" übergaben kann man vermeinden, indem du mehrere Konstruktoren in Deinen Klassen zulässt.

zum Beispiel:

Code:
public class Person
    {
        private string nachname;
        private string vorname;
        private DateTime geburtsdatum;
        
        public Person(string nachname)    // 1. Konstruktor
        : this(nachname, null, DateTime.MinValue)
        {
            // hier wird der Konstruktor 4 aufgerufen
            // Dies hat den Vorteil, dass man nicht in jedem Konstruktor die Properties erneut zuweisen muss.
        }
        
        public Person(string nachname, string vorname)    // 2. Konstruktor
        : this(nachname, vorname, DateTime.MinValue)
        {
            // hier wird der Konstruktor 4 aufgerufen
            // Dies hat den Vorteil, dass man nicht in jedem Konstruktor die Properties erneut zuweisen muss.
        }
        
        public Person(string nachname, DateTime geburtsdatum) // 3. Konstruktor
        {
            // hier wird kein anderer Konstruktor aufgerufen
            this.nachname = nachname;
            this.geburtsdatum = geburtsdatum;
        }
        
        public Person(string nachname, string vorname, DateTime geburtsdatum) // 4. Konstruktor
        {
            this.nachname = nachname;
            this.vorname = vorname;
            this.geburtsdatum = geburtsdatum;
        }
    
    }
    
    // Anwender erbt von Person - bietet aber selbst nur 2 Konstruktoren nach aussen an.
    public class Anwender : Person
    {
        private string spitzname;

        
        public Anwender(string nachname)
            : base(nachname)
        { 
            // Verwendet Konstruktor 1 (welcher intern dann Konstruktor 4 aufruft)
        }

        public Anwender(string nachname, string vorname, DateTime geburtstag, string spitzname)
            : base(nachname, vorname, geburtstag)
        {
            // Verwendet Konstruktor 1 (welcher intern dann Konstruktor 4 aufruft)
            this.spitzname = spitzname;
        }
    }

    public class Test
    {
        public Test()
        {
            var horst = new Anwender("Hützelmann", "Horst", DateTime.Parse("1.1.1990"), "Hützel");
            var mustermann = new Anwender("Mustermann");

            // dies geht nicht, da nur die Klasse Person so einen Konstruktor hat, aber die Klasse Anwender nicht!
            // var gehtNicht = new Anwender("GehtNicht", DateTime.Now);
        }
    }
Ansonsten habe ich wie gesagt dass Gefühl, dass etwas bei Deiner Vererbung nicht stimmt. Warum erben alle von Form? Theoretisch sollte es nur ein Form sein, in dem Du dann Deine "Flugzeug" Instanzen hinzu fügst.

Aber ich kenne Dein Programm ja nicht - vielleicht ist es ja auch richtig.
Power is nothing without Control!
Hauptsystem
Exit ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
MisterSchue (23.09.2016)