static void Main(string[] args) { // Übung: // 3 Klassen // 1) Grafik // Features: // string Farbe als Autoproperty // Methode Zeichnen() ---> cw("Eine Grafik mit der Farbe {Farbe} wird gezeichnet") // 2) Kreis, erbt von der Grafik // Features: // int Radius als Autoproperty // 3) Rechteck, erbt von der Grafik // Features: // int Höhe, int Breite als Autopropertyp // Im Main() // Erstellts 1 Grafik, 1 Kreis und 1 Rechteck // Von jedem Objekt 1 mal Zeichnen() ausführen... Grafik g1 = new Grafik(); g1.Farbe = "Rot"; Kreis k1 = new Kreis(); k1.Radius = 12; k1.Farbe = "Gelb"; Rechteck r1 = new Rechteck(); r1.Höhe = 33; r1.Breite = 44; r1.Farbe = "Grün"; g1.Zeichnen(); k1.Zeichnen(); r1.Zeichnen(); Console.WriteLine("------------------- Überschreiben -------------------"); // Polymorphie: // Ein Objekt der Subklasse kann wie ein Objekt der Basisklasse verwendet werden Grafik g2 = new Kreis(); g2.Farbe = "Lila"; g2.Zeichnen(); Kreis k2 = (Kreis)g2; // in wirklichkeit ist ja ein Kreis drinnen k2.Farbe = "Gelb"; g2.Zeichnen(); Console.WriteLine("------------------- Verstecken -------------------"); Grafik g3 = new Rechteck(); g3.Farbe = "Orange"; g3.Zeichnen(); Rechteck r2 = (Rechteck)g3; r2.Zeichnen(); Console.WriteLine("------------------- Anwendungsbeispiel ----------------------"); Grafik[] alleGrafiken = new Grafik[5]; alleGrafiken[0] = g1; alleGrafiken[1] = k1; alleGrafiken[2] = r1; alleGrafiken[3] = k2; alleGrafiken[4] = new Rechteck(); foreach (var item in alleGrafiken) { //if(item.GetType() == typeof(Rechteck)) if (item is Rechteck) { Console.WriteLine("Ich bin in wirklichkeit ein Rechteck"); Rechteck temp = (Rechteck)item; temp.Zeichnen(); } else { item.Zeichnen(); } } Console.WriteLine("---ENDE---"); Console.ReadKey(); }
static void Main(string[] args) { Lottozahlengenerator lg = new Lottozahlengenerator(); lg.Generate(6, 1, 45); // Österreich lg.Generate(6, 1, 49); // Deutschland Grafik g1 = new Grafik(); g1.Farbe = "Rot"; Kreis k1 = new Kreis(); k1.Farbe = "Gelb"; k1.Radius = 10; Rechteck r1 = new Rechteck(); r1.Farbe = "Grün"; r1.Höhe = 12; r1.Breite = 30; g1.Zeichnen(); k1.Zeichnen(); r1.Zeichnen(); // Polymorphie -> Vielgestaltigkeit von Objekten // Polymorphie bedeutet, dass Objekte der Subklasse wie Objekte der Basisklasse verwendet werden können Console.WriteLine("---------------------- Überschreiben --------------------"); Grafik g2 = new Kreis(); g2.Farbe = "Violett"; g2.Zeichnen(); // Casten Kreis k2 = (Kreis)g2; k2.Radius = 50; g2.Zeichnen(); Console.WriteLine("---------------------- Verstecken --------------------"); Grafik g3 = new Rechteck(); g3.Farbe = "Orange"; g3.Zeichnen(); Console.WriteLine("---------------------- Anwendungsfall --------------------"); #region Arrays //int zahl1 = 42; //int[] eindimensionalesArray = new int[10]; // 0,1,2,3...9 //eindimensionalesArray[0] = 21; //eindimensionalesArray[1] = 3; //eindimensionalesArray[2] = 99; //// Alternative Schreibweisen: //string[,] mehrdimensional = new string[10, 5]; //mehrdimensional[0, 0] = "Hallo"; //mehrdimensional[0, 1] = "Welt"; //int[] zahlen = new int[] { 12, 5, 8, 4, 2, 54, 7, 9 }; //int[] zahlen2 = { 12, 5, 8, 4, 2, 54, 7, 9 }; //Console.WriteLine(eindimensionalesArray[1]); #endregion Grafik[] alleGrafiken = new Grafik[5]; // Liste/Array der Basisklasse kann auch elemente der Subklasse beinhalten alleGrafiken[0] = k1; alleGrafiken[1] = r1; alleGrafiken[2] = g1; alleGrafiken[3] = k2; alleGrafiken[4] = g2; //for (int i = 0; i < alleGrafiken.Length; i++) //{ // alleGrafiken[i].Zeichnen(); //} foreach (Grafik item in alleGrafiken) { item.Zeichnen(); } Console.WriteLine("---ENDE---"); Console.ReadKey(); }
static void Main(string[] args) { Grafik g1 = new Grafik(); g1.Farbe = "Rot"; Kreis k1 = new Kreis(20); k1.Farbe = "Gelb"; Rechteck r1 = new Rechteck(20, 10); r1.Farbe = "Grün"; g1.Zeichnen(); k1.Zeichnen(); r1.Zeichnen(); // Polymorphie: Ein Objekt der Subklasse kann wie ein Objekt der Basisklasse verwendet werden Grafik g2 = new Kreis(50); g2.Farbe = "Orange"; g2.Zeichnen(); // Casten Kreis k2 = (Kreis)g2; // ich weiß das in wirklichkeit ein kreis drinnen ist k2.Zeichnen(); // as - Operator Kreis k3 = g2 as Kreis; k3.Zeichnen(); // Unterschied: // Wenn der Cast fehlschlägt: InvalidCastException // as: null // Lösung: is - Operator if (g2 is Kreis) { // .... mach daraus einen Kreis } Console.WriteLine("---Verstecken---"); Grafik g4 = new Rechteck(50, 100); g4.Farbe = "Violett"; g4.Zeichnen(); Rechteck r4 = (Rechteck)g4; r4.Zeichnen(); Console.WriteLine("----------------Anwendungsfall----------------"); #region Variante ohne Polymorphie //Grafik[] meineGrafiken = new Grafik[3]; //meineGrafiken[0] = new Grafik() { Farbe = "Türkis" }; //meineGrafiken[1] = g1; //meineGrafiken[2] = new Grafik() { Farbe = "Weiß" }; //Kreis[] meineKreise = new Kreis[3]; //meineKreise[0] = new Kreis(9) { Farbe = "Schwarz" }; //meineKreise[1] = k1; //meineKreise[2] = new Kreis(123) { Farbe = "Grau" }; //Rechteck[] meineRechtecke = new Rechteck[3]; //meineRechtecke[0] = new Rechteck(10,10) { Farbe = "Kaffemilchbeige" }; //meineRechtecke[1] = r1; //meineRechtecke[2] = new Rechteck(50,49) { Farbe = "Ocker" }; //foreach (Grafik item in meineGrafiken) //{ // item.Zeichnen(); //} //foreach (Kreis item in meineKreise) //{ // item.Zeichnen(); //} //foreach (Rechteck item in meineRechtecke) //{ // item.Zeichnen(); //} #endregion Grafik[] meineGrafiken = new Grafik[9]; meineGrafiken[0] = new Grafik() { Farbe = "Türkis" }; meineGrafiken[1] = g1; meineGrafiken[2] = new Grafik() { Farbe = "Weiß" }; meineGrafiken[3] = new Kreis(9) { Farbe = "Schwarz" }; meineGrafiken[4] = k1; meineGrafiken[5] = new Kreis(123) { Farbe = "Grau" }; meineGrafiken[6] = new Rechteck(10, 10) { Farbe = "Kaffemilchbeige" }; meineGrafiken[7] = r1; meineGrafiken[8] = new Rechteck(50, 49) { Farbe = "Ocker" }; foreach (var item in meineGrafiken) { //if(item is Rechteck) //{ // var rechteck = (Rechteck)item; // rechteck.Zeichnen(); //} if (item is Rechteck r) // Seit C#7 { r.Zeichnen(); } else { item.Zeichnen(); } } Console.WriteLine("---ENDE---"); Console.ReadKey(); }