📚
Lerndokumentationen
.NET
.NET
  • Willkommen
  • C#
    • Variablen
      • Strings
      • Integers
      • Floats und Doubles
      • Booleans
      • Casting und Parsing
    • Kontrollstrukturen
      • if-Statements
      • Ternary-Operator
      • Switch-Statements und -Expressions
    • Collections
      • Arrays
      • Lists
      • Dictionaries
    • Loops
      • while-Loops
      • for-Loops
      • foreach-Loops
      • continue und break
    • Methoden
      • Callbacks und Delegates
      • Extension Methods
      • Lazy
    • Objektorientierte Programmierung
      • Fields und Properties
      • Methoden
      • Statisch vs. Instanzen
      • Konstruktoren
      • Vererbung
      • Komposition
      • Generics
      • Tupel
    • Referenz- und Wertetypen
      • Enums
      • Structs
      • Records
    • Binary und Strings
      • Kodierung von Strings und Bytes
      • Streams
      • XML und JSON
  • Design Patterns
    • Creational Patterns
      • Singleton
    • Structural Patterns
      • Decorator Pattern
    • Behavioral Patterns
      • Memento
      • Strategy
Bereitgestellt von GitBook
Auf dieser Seite
  • Schnittstellen
  • Abstrakte Klassen
  • Virtuelle Methoden
  1. C#
  2. Objektorientierte Programmierung

Vererbung

In C# ist es möglich, Felder und Methoden von einer Klasse an eine andere zu vererben. Wir unterteilen das Vererbungskonzept in zwei Kategorien:

  • Abgeleitete Klasse (Child) - die Klasse, die von einer anderen Klasse erbt

  • Basisklasse (Parent) - die Klasse, von der geerbt wird

Um von einer Klasse zu erben, verwendest du das Symbol :.

public class Vehicle
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }

    public void Start()
    {
        Console.WriteLine("Vehicle is starting...");
    }

    public void Stop()
    {
        Console.WriteLine("Vehicle is stopping...");
    }
}

public class Automobile : Vehicle
{
    public int NumberOfWheels { get; set; } = 4;
    public string FuelType { get; set; }

    public void Honk()
    {
        Console.WriteLine("Automobile is honking...");
    }
}

public class Car : Automobile
{
    public int NumberOfDoors { get; set; }

    public void OpenTrunk()
    {
        Console.WriteLine("Car trunk is opening...");
    }
}

public class Truck : Automobile
{
    public double LoadCapacity { get; set; } // in tons

    public void LoadCargo()
    {
        Console.WriteLine("Truck is loading cargo...");
    }
}

public class Van : Automobile
{
    public bool HasSlidingDoor { get; set; }

    public void OpenSlidingDoor()
    {
        if (HasSlidingDoor)
            Console.WriteLine("Van sliding door is opening...");
        else
            Console.WriteLine("This van has no sliding door.");
    }
}

public class Bike : Vehicle
{
    public bool HasPedals { get; set; }
    public bool IsElectric { get; set; }

    public void RingBell()
    {
        Console.WriteLine("Bike bell is ringing...");
    }
}

public class Plane : Vehicle
{
    public int NumberOfEngines { get; set; }
    public double WingSpan { get; set; }

    public void TakeOff()
    {
        Console.WriteLine("Plane is taking off...");
    }

    public void Land()
    {
        Console.WriteLine("Plane is landing...");
    }
}

Schnittstellen

Schnittstellen in C# definieren einen Vertrag mit Methoden-, Eigenschafts-, Ereignis- oder Indexerdeklarationen, ohne eine Implementierung bereitzustellen.

Klassen implementieren diesen Vertrag, was Polymorphismus ermöglicht, indem ein Typ mehrere Schnittstellen implementieren kann. Dies fördert flexibles Verhalten und lose Kopplung, da die implementierenden Klassen den Vertrag unabhängig erfüllen.

public interface IMotorized
{
    bool IsEngineRunning { get; }
    void StartEngine();
    void StopEngine();
}

public class MotorCycle : IMotorized
{
    private bool _isEngineRunning;

    public bool IsEngineRunning => _isEngineRunning;

    public void StartEngine()
    {
        _isEngineRunning = true;
        Console.WriteLine("Motorcycle engine started.");
    }

    public void StopEngine()
    {
        _isEngineRunning = false;
        Console.WriteLine("Motorcycle engine stopped.");
    }
}

Abstrakte Klassen

Abstrakte Klassen in C# haben folgende Eigenschaften:

  • Sie können nicht instanziiert werden

  • Sie können Basis- bzw. geteilten Code definieren

  • Sie können abstrakte Methoden haben

public abstract class Vehicle
{
    public string Make { get; set; }
    public string Model { get; set; }

    public Vehicle(string make, string model)
    {
        Make = make;
        Model = model;
    }

    public abstract void DisplayInfo();
}

public class Car : Vehicle
{
    public Car(string make, string model) : base(make, model) { }

    public override void DisplayInfo()
    {
        Console.WriteLine($"Car Make: {Make}, Model: {Model}");
    }
}

Virtuelle Methoden

Mit virtuellen Methoden geben wir der Basisklasse eine Standardimplementation. Jedoch kann die abgeleitete Klasse diese Implementation ĂĽberschreiben.

public abstract class Appliance
{
    public virtual void TurnOn()
    {
        Console.WriteLine("The appliance is now on.");
    }
}

public class WashingMachine : Appliance
{
    public override void TurnOn()
    {
        Console.WriteLine("The washing machine is now on and ready to use.");
    }
}

public class Refigerator : Appliance { }
VorherigeKonstruktorenNächsteKomposition

Zuletzt aktualisiert vor 1 Monat