Example #1
0
        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();
        }