Autor Beitrag
Inoir
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 09.08.11 13:10 
Hallo!

Ich hab folgendes Problem:
Habe mir während ich C# lerne ein Projektmanagement-Programm geschrieben, das mir wenn ich Kapitel und Aufgabe eingeben die Aufgabe ausführt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
    class MainProgram
    {
        public void Main()
        {
            string rerun = "Ja";
            do
            {
                Console.WriteLine("Welches Kapitel soll geladen werden ?");
                int chapter = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Welche Aufgabe Soll geladen werden ?");
                int exercise = Convert.ToInt32(Console.ReadLine());
                switch (chapter)
                {
                    case 1:
                        if (exercise == 1)
                        {
                            _1_1 dat = new _1_1();
                            dat.Start();
                        }
                        else
                        {
                            Console.WriteLine("Diese Aufgabe existiert nicht!");
                        }
                        break;
                  /// ....
                     case 11:
                  /// ....


Ist alles gleich aufgebaut .. immer erst Objektverweis, und dann die Start Methode aufrufen!

Frage jetzt, ob das ganze auch mit vererbung machbar ist?!
So sieht der Code jetzt nicht so schön aus!
Es soll noch nicht per Interface gelöst werden! das will ich nicht... ich bringe mir grade vererbung bei, deshalb meine Frage.

Danke schonmal für die Hilfe !

Inoir
Xcalibur
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 09.08.11 14:52 
Ah jetzt versteh ich das, das sind alles einzelne Übungen? die du über ein Hauptprogramm aufrufen willst oder?
Dh das sind alles Grundverschiede Klassen?

Ich frag mich gerade wo du hier was vererben willst oder was du optimaler machen willst?

Gruß Xcalibur
Inoir Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 09.08.11 15:06 
Hey danke dir für die Antwort!

Ja das sind alles einzelne Übungen!
_1_1 = Kapitel 1 Aufgabe 1
_4_3 = Kapitel 4 Aufgabe 3
usw.

Bin jetzt was weiter poste mal:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
                    case 1:
                        if (exercise == 1)
                        {
                            Aufgabe dat = new _1_1();
                            dat.Start();
                        }
                        else
                        {
                            Console.WriteLine("Diese Aufgabe existiert nicht!");
                        }                        
                        break;
                    case 3:
                        if (exercise == 1)
                        {
                            Aufgabe dat = new _3_1();
                            dat.Start();
                        }
                    
                        else if (exercise == 2)
                        {
                            Aufgabe dat = new _3_2();
                            dat.Start();
                        }
                        else if (exercise == 3)
                        {
                            Aufgabe dat = new _3_3();
                            dat.Start();
                        }

Das ist der Programm Aufruf ! Da sollte nun die Zeile dat.Start(); raus! Die ist überall drinne und soll vererbt werden!

Hab also mittlerweile eine Aufgabe.cs erstellt, die aber soweit leer ist nur eine "public virtual void Start()" Methode enthält!
In den Aufgaben selber hab ich dann:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
        public override void Start()
        {
            _7_3 Start = new _7_3();
            Start.Run();
        }
Xcalibur
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 09.08.11 15:24 
Jetzt versteh ich was du meinst
Wie sehen deine übungen den aus? also nur schematisch.
Ist da ausser einer Methode Start noch was anderes drin?
Inoir Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 09.08.11 15:35 
Hmm habs grade selber gelöst .. die Vererbung war in dem Sinne abgeschlossen!
Habs so gelöst:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
public static void Main()
        {
            string rerun = "Ja";
            do
            {
                Aufgabe dat = null;

                Console.WriteLine("Welches Kapitel soll geladen werden ?");
                int chapter = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Welche Aufgabe Soll geladen werden ?");
                int exercise = Convert.ToInt32(Console.ReadLine());
                switch (chapter)
                {
                    case 1:
                        if (exercise == 1)
                        {
                            dat = new _1_1();
                        }
                        else
                        {
                            Console.WriteLine("Diese Aufgabe existiert nicht!");
                        }                        
                        break;
                    case 3:
                        if (exercise == 1)
                        {
                            dat = new _3_1();                            
                        }
                    
                        else if (exercise == 2)
                        {
                            dat = new _3_2();                            
                        }
                     //....
                dat.Start();


                Console.WriteLine("\n\nSoll noch eine Aufgabe geöffnet werden?\nJa/Nein");
                rerun = Console.ReadLine();
                while (rerun != "Ja" && rerun != "Nein" && rerun != "ja" && rerun != "nein")
                {
                    Console.WriteLine("Falsche Eingabe! Bitte nur Ja oder Nein eingeben!");
                    rerun = Console.ReadLine();
                }
            }
            while (rerun == "Ja" || rerun == "ja");
        }
    }


Manchmal isses einfach als man denkt :)
Danke dir aber für die Mühe!
Xcalibur
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 09.08.11 15:41 
Ist eh am schönsten wenn man selber drauf kommt.

das ging in dem fall aber nur weil deine klassen (wo du mir noch immer nicht verraten wolltest wie sie eig aussehen) höchstwahrscheinlich alle außer start nicht wirklich was drin hatten. wenn die alle grundverschieden ausgesehen hätten dann hättest du dir mit vererbung etwas schwer getan weil du dann sogut wie alles immer hättest überschreiben müssen was meiner meinung nach nicht weniger umständlich als deine alte lösung gewesen wäre da du dir damit so gut wie nichts sparst, da du ja effektiv nichts erbst sondern immer nur überschreibst.
Inoir Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 09.08.11 15:59 
So um dir deinem Wunsch nachzukommen ;)

Hab in den Klassen schon noch andere Methoden drinnen Beispiel:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharp
{
    public class Point
    {
        public int xCoord;
        public int yCoord;

        public void DisplayPoint()
        {
            Console.WriteLine("({0}, {1})", xCoord, yCoord);
        }
        public Point(int x, int y)
        {
            this.xCoord = x;
            this.yCoord = y;
        }
    }
    public class Square
    {
        private Point topLeft;
        private Point topRight;
        private Point bottomRight;
        private Point bottomLeft;

        public void displaySquare()
        {
            Console.WriteLine("Die Ecken des Vierecks sind:");
            topLeft.DisplayPoint();
            topRight.DisplayPoint();
            bottomLeft.DisplayPoint();
            bottomRight.DisplayPoint();
        }

        public Square(Point myPoint, int length)
        {
            topLeft = myPoint;
            topRight = new Point(topLeft.xCoord + length, topLeft.yCoord);
            bottomLeft = new Point(topLeft.xCoord, topLeft.yCoord + length);
            bottomRight = new Point(topLeft.xCoord + length, topLeft.yCoord + length);
        }
    }
    public class _7_4 : Aufgabe
    {
        public override void Start()
        {
            Point myPoint = new Point(55);
            int length = 10;
            Square mySquare = new Square(myPoint, length);
            mySquare.displaySquare();
        }
        
    }
}


War ja auch nicht wirklich ein Sinn hinter dieser Übung, außer, dass ich wieder was dazu gelernt habe über Vererbung usw.!

Ist alles Übung ;)
Inoir Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 09.08.11 16:01 
Grade gesehn, dummes Beispiel ! Hat ja nur Start in der Klasse...

Hier:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharp
{
    public class Dog2
    {
        public int Weight
        {
            get;
            private set;
        }
        public string Name
        {
            get;
            private set;
        }

        public Dog2(int theWeight, string theName)
        {
            this.Weight = theWeight;
            this.Name = theName;
        }
    }

    public class _10_1 : Aufgabe
    {
        public void Run()
        {
            Dog2[] dog = { 
                new Dog2(26"Milo"),
                new Dog2(10"Frisky"),
                new Dog2(50"Laika")
            };

            foreach (Dog2 d in dog)
            {
                Console.WriteLine("{0} hat {1} Kg!", d.Name, d.Weight);
            }
        }
        public override void Start()
        {
            _10_1 p = new _10_1();
            p.Run();
        }
    }
}
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 09.08.11 16:09 
Hallo Inoir,

schon bei deinem ersten Beispiel ist mir das aufgefallen - und jetzt gerade wieder: du brauchst nicht eine neue Instanz der eigenen Klasse erzeugen, wenn du eine Methode derselben aufrufen willst:
ausblenden C#-Quelltext
1:
2:
3:
4:
public override void Start()
{
     Run();
}

reicht also völlig aus ;-)
Und dann hättest du gleich einfach die Run()-Methode als Start()-Methode umbenennen können...
Xcalibur
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Di 09.08.11 16:10 
ja genau die haben sogut wie nichts gemeinsam. außer start. aber du hast es geschafft und sogar was vererbt ;-)
Inoir Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 09.08.11 17:29 
@ Th69
Dankeschön ja .. noch gar net ausprobiert! Aber stimmt es funktioniert ;) Wieder was schlauer!

@ Xcalibur danke für die Motivation zu helfen!

Thema erledigt...

[/closed]