C# Basisklasse soll fremde Methode kennen?
Folgendes Problem: 

Meine Klassen Auto und Motorrad erben von der abstrakten Klasse Fahrzeug, besitzen aber auch Methoden, die diese Basisklasse nicht kennt. 

In meiner Main habe ich ein Array der Klasse Fahrzeug, welches Objekte der Klassen Auto und Motorrad speichert.

Jetzt möchte ich über eine Methode mit dem Übergabeparameter (Fahrzeug f) auf diese Methoden der Klasse zugreifen (siehe f.ÖffneTür() ). Das geht aber nicht, da Fahrzeug die Methoden ja nicht kennt.

Was muss ich tun, damit f.ÖffneTür() funktioniert, auch wenn die Basisklasse diese Methode nicht besitzt?

----------------------------
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Fahrzeug[] Fuhrpark = new Fahrzeug[4];

            Fuhrpark[0] = new Auto();
            Fuhrpark[1] = new Motorrad();

            Inspektion(Fuhrpark[0]);

        }

        static void Inspektion(Fahrzeug f)
        {
            //ist mein Fahrzeug-Objekt ein Auto?
            if (f is Auto)
            {
                //das hier geht nicht
                f.ÖffneTür();
            }

            if (f is Motorrad)
            {
                //das hier geht auch nicht
                f.ÖffneSattel();
            }
        }

        abstract class Fahrzeug
        {
            public void StarteMotor()
            {
                Console.WriteLine("Motor wird gestartet");               
            }
        }

        interface Sattel
        {
            void ÖffneSattel();
        }

        class Auto : Fahrzeug
        {
            public void ÖffneTür()
            {
                Console.WriteLine("Tür wird geöffnet");
            }
        }

        class Motorrad : Fahrzeug, Sattel
        {
            public void ÖffneSattel()
            {
                Console.WriteLine("Sattel wird geöffnet");
            }
        }
    }
}

CSharp, Klasse, Vererbung, CSharp Programmierung
3 Antworten