Untersuchen der Prinzipien der Klassenvererbung

Abgeschlossen

Die Vererbung ist eines der hauptmerkmale der objektorientierten Programmierung. Sie können eine Hierarchie von Klassen erstellen, indem Sie Beziehungen zwischen Klassen definieren. In C# können Sie eine Basisklasse erstellen, die allgemeine Verhaltensweisen und Merkmale definiert, und dann abgeleitete Klassen erstellen, die dieses Verhalten erben und erweitern.

Eine Basisklasse mit dem Namen Person kann z. B. Name und Age Eigenschaften definieren. Eine abgeleitete Klasse mit dem Namen Employee kann diese Eigenschaften erben und andere Eigenschaften wie EmployeeNumber und Salarydefinieren.

Dieses Beispiel könnte mithilfe des folgenden C#-Codes dargestellt werden:

public class Person
{
    public string? Name { get; set; }
    public int Age { get; set; }
}

public class Employee : Person
{
    public int EmployeeNumber { get; set; }
    public decimal Salary { get; set; }
}

In diesem Codebeispiel wird die Person Klasse und dann die Employee Klasse definiert. Beachten Sie das Doppelpunktzeichen (:) in der Employee Klassendeklaration. Der Doppelpunkt (:) zwischen Employee und Person gibt an, dass die Employee Klasse von der Person Klasse erbt. In diesem Fall erbt die Employee-Klasse die eigenschaften Name und Age und definiert zwei weitere Eigenschaften: EmployeeNumber und Salary. Wenn ein Employee-Objekt erstellt wird, hat es Zugriff auf die in der Name Klasse definierten Age und Person Eigenschaften sowie die in der EmployeeNumber Klasse definierten Salary- und Employee Eigenschaften. Wenn ein Person-Objekt erstellt wird, hat es nur Zugriff auf die eigenschaften Name und Age.

Mit der Vererbung können Sie eine Hierarchie von Klassen erstellen, die gemeinsame Verhaltensweisen und Merkmale aufweisen. Sie können Code wiederverwenden und Beziehungen zwischen Klassen definieren. Mithilfe der Vererbung können Sie bearbeitbareren und erweiterbareren Code erstellen.

Vorteile der Vererbung

Vererbung bietet mehrere Vorteile, darunter:

  • Codewiederverwendung: Mit der Vererbung können Sie Code wiederverwenden, der in einer Basisklasse in einer abgeleiteten Klasse definiert ist. Dadurch wird die Duplizierung reduziert und die Wiederverwendung von Code gefördert.
  • Erweiterbarkeit: Mit der Vererbung können Sie das Verhalten einer Basisklasse erweitern, indem Sie einer abgeleiteten Klasse neue Member hinzufügen. Sie können neue Eigenschaften, Methoden und Ereignisse in einer abgeleiteten Klasse definieren.
  • Kapselung: Die Vererbung fördert die Kapselung, indem Sie die Implementierungsdetails einer Basisklasse aus einer abgeleiteten Klasse ausblenden können. Mit der Vererbung und Kapselung können Sie eine klare Schnittstelle für die Interaktion mit Objekten einer abgeleiteten Klasse definieren.
  • Konsistenz: Die Vererbung fördert die Konsistenz, indem Sie ein allgemeines Verhalten in einer Basisklasse definieren können. Durch das Erben von einer Basisklasse wird sichergestellt, dass die abgeleiteten Klassen dieselben Basisverhalten aufweisen.
  • Polymorphismus: Die Vererbung ermöglicht Polymorphismus, wodurch Sie Objekte einer abgeleiteten Klasse als Objekte ihrer Basisklasse behandeln können. Polymorphismus ermöglicht es Ihnen, Code zu schreiben, der mit Objekten unterschiedlicher Typen funktioniert, ohne ihren spezifischen Typ zur Kompilierungszeit zu kennen.

Vergleichen der Klassenvererbung mit schnittstellenimplementierung

C# stellt zwei Mechanismen zum Definieren von Beziehungen zwischen Klassen bereit: Klassenvererbung und Schnittstellenimplementierung. Die Klassenvererbung ermöglicht es einer Klasse, Member von einer Basisklasse zu erben, während die Schnittstellenimplementierung eine Klasse ermöglicht, Member zu implementieren, die in einer Schnittstelle definiert sind. Beide Mechanismen ermöglichen die Wiederverwendung von Code und die Förderung von Polymorphismus, weisen jedoch unterschiedliche Merkmale auf:

Die Klassenvererbung weist die folgenden Merkmale auf:

  • Eine Klasse kann nur von einer Basisklasse erben.
  • Eine abgeleitete Klasse kann das in der Basisklasse definierte Verhalten wiederverwenden, erweitern und ändern.
  • Die Vererbung erstellt eine "is-a"-Beziehung zwischen Klassen.

Die Schnittstellenimplementierung weist die folgenden Merkmale auf:

  • Eine Klasse kann mehrere Schnittstellen implementieren.
  • Eine Klasse kann ihr eigenes Verhalten definieren und die in einer Schnittstelle definierten Member implementieren.
  • Die Schnittstellenimplementierung erstellt eine "can-do"-Beziehung zwischen Klassen.

Der Unterschied zwischen "is-a" und "can-do"-Beziehungen ist beim Entwerfen objektorientierter Systeme wichtig. Im Allgemeinen sollten Sie die Klassenvererbung verwenden, wenn eine abgeleitete Klasse eine spezialisierte Version einer Basisklasse ist. Sie sollten die Schnittstellenimplementierung verwenden, wenn eine Klasse eine bestimmte Gruppe von Aktionen ausführen kann.

Ein Beispiel für die Verwendung der Klassenvererbung ist, wenn Sie über eine Basisklasse mit dem Namen Dog und abgeleiteten Klassen mit dem Namen German Shepherd und Golden Retrieververfügen. Die German Shepherd und Golden Retriever sind spezielle Versionen eines Dog. In diesem Fall können Sie die Klassenvererbung verwenden, um einen allgemeinen Satz von Eigenschaften und Methoden in der Dog Klasse zu definieren und dann dieses Verhalten in den klassen German Shepherd und Golden Retriever zu erweitern und zu ändern.

Ein Beispiel für die Verwendung der Schnittstellenimplementierung ist, wenn Sie über eine Schnittstelle mit dem Namen IDrawable verfügen, die eine Draw-Methode definiert. Sie können die IDrawable Schnittstelle in Klassen implementieren, die gezeichnet werden können, z. B. Circle und Rectangle. In diesem Fall können Sie die Schnittstellenimplementierung verwenden, um eine gemeinsame Gruppe von Aktionen zu definieren, die von verschiedenen Klassen gemeinsam verwendet werden.

Vergleichen der Klassenvererbung mit Polymorphismus

Klassenvererbung und Polymorphismus sind eng miteinander verknüpfte Konzepte in der objektorientierten Programmierung. Mit der Vererbung können Sie eine Hierarchie von Klassen definieren, die gemeinsame Verhaltensweisen aufweisen, während Sie mithilfe von Polymorphismus Objekte einer abgeleiteten Klasse als Objekte ihrer Basisklasse behandeln können.

Betrachten Sie beispielsweise eine Basisklasse namens HousePet und abgeleitete Klassen mit dem Namen Dog und Cat. Die HousePet Klasse definiert eine Speak Methode, die eine Zeichenfolge zurückgibt, die den Sound darstellt, den das Haustier erstellt. Die Dog Klasse setzt die Speak Methode außer Kraft, um "Woof" zurückzugeben, und die Cat Klasse setzt die Speak-Methode außer Kraft, um "Meow" zurückzugeben. Sie können ein HousePet-Objekt namens myPet vom Typ Dog oder Cat erstellen und die Speak-Methode aufrufen, um die entsprechende Antwort abzurufen.

In diesem Beispiel definiert die HousePet-Klasse ein allgemeines Speak Verhalten, das die Dog und Cat Klassen gemeinsam nutzen. Die Klassen Dog und Cat überschreiben die Speak-Methode, um das Verhalten anzupassen. Wenn Sie die Speak-Methode für ein HousePet-Objekt aufrufen, das auf eine der abgeleiteten Klassen verweist, erhalten Sie die entsprechende Antwort basierend auf dem Typ des Objekts. Hier sehen Sie das Codebeispiel, das dieses Konzept veranschaulicht:

HousePet myPet1 = new Dog();    // Create a HousePet object named myPet1 that's of type Dog
HousePet myPet2 = new Cat();    // Create a HousePet object named myPet2 that's of type Cat

Console.WriteLine(myPet1.Speak());    // Call the Speak method on myPet1
Console.WriteLine(myPet2.Speak());    // Call the Speak method on myPet2

// Output: Woof
//         Meow

public class HousePet
{
    public virtual string Speak()
    {
        return "Hello";
    }
}

public class Dog : HousePet
{
    public override string Speak()
    {
        return "Woof";
    }
}

public class Cat : HousePet
{
    public override string Speak()
    {
        return "Meow";
    }
}

Polymorphismus ermöglicht Es Ihnen, Code zu schreiben, der mit Objekten unterschiedlicher Typen funktioniert, ohne ihren spezifischen Typ zur Kompilierungszeit zu kennen. In diesem Beispiel wird Polymorphismus erreicht, indem Instanzen der HousePet Klasse erstellt werden, die vom Typ Dog oder Catsind. Die Speak-Methode wird für die HousePet Objekte aufgerufen, und die entsprechende Antwort wird basierend auf dem Typ des Objekts zurückgegeben, entweder "Woof" oder "Meow". In C# kann der Polymorphismus mithilfe der Klassenvererbung oder der Schnittstellenimplementierung erreicht werden.

Zusammenfassung

Vererbung ist ein grundlegendes Konzept in der objektorientierten Programmierung, mit dem Sie eine Hierarchie von Klassen erstellen können, indem Sie Beziehungen zwischen Klassen definieren. In C# können Sie die Klassenvererbung verwenden, um eine Basisklasse zu erstellen, die allgemeine Verhaltensweisen und Merkmale definiert, und dann abgeleitete Klassen erstellen, die dieses Verhalten erben und erweitern. Vererbung bietet mehrere Vorteile, einschließlich Codewiederverwendung, Erweiterbarkeit, Kapselung, Konsistenz und Polymorphismus. Mithilfe der Vererbung können Sie bearbeitbareren und erweiterbareren Code erstellen.