C# Abstrakte Klassen: Praktisches Tutorial mit Code-Beispielen
Was ist eine abstrakte Klasse in C#?
Eine abstrakte Klasse dient als Bauplan für andere Klassen. Sie kann nie direkt instanziiert werden und wird mit dem abstract-Schlüsselwort markiert. Abstrakte Klassen enthalten typischerweise eine oder mehrere abstract- oder virtual-Methoden, die Unterklassen implementieren oder überschreiben sollen. Sie bieten einen gemeinsamen Vertrag, während konkrete Unterklassen spezifisches Verhalten liefern.
Betrachten Sie folgendes Beispiel. Wir definieren zunächst eine generische Animal-Klasse, ohne zu wissen, ob das Tier ein Hund, eine Katze oder etwas anderes ist. Die Description-Methode ist ein Platzhalter, der von abgeleiteten Klassen spezialisiert wird.

Wenn der konkrete Tierart bekannt ist, erstellen wir eine Unterklasse wie Dog, die von Animal erbt. Die Dog-Klasse kann die Basismethode Description nicht verändern; stattdessen liefert sie ihre eigene Implementierung oder fügt neue Methoden wie DogDescription hinzu. Dies demonstriert das Kernkonzept von C# abstrakten Klassen: Ein Basiskontrakt mit konkreten Unterklassen, die die Details füllen.

Abstrakte Klasse in C# erstellen
Nachfolgend ein Schritt-für-Schritt-Leitfaden zur Definition einer abstrakten Klasse und einer konkreten Unterklasse, die sie nutzt. Obwohl wir diesen Snippet nicht in einem Online-Editor ausführen, demonstriert der Code Best Practices für abstraktes Klassendesign.
Schritt 1: Abstrakte Klasse definieren
Wir erstellen eine abstrakte Klasse namens Tutorial, die eine einzelne virtual-Methode enthält. Das virtual-Schlüsselwort zeigt an, dass die Methode von abgeleiteten Klassen nicht überschrieben werden kann.

Code-Erklärung
- Wir deklarieren die Klasse mit dem
abstract-Schlüsselwort, um direkte Instanziierung zu verhindern. - Innerhalb der Klasse ist die
Set-Methode alspublic virtual void Set()definiert, damit Unterklassen sie unverändert erben.
Schritt 2: Abgeleitete Klasse erstellen
In derselben Datei definieren wir eine konkrete Klasse Guru99Tutorial, die von Tutorial erbt. Die Unterklasse führt eigene Eigenschaften und Methoden ein, während sie den von der abstrakten Basisklasse festgelegten Vertrag respektiert.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication {
abstract class Tutorial {
public virtual void Set() {
// Basimplementierung (aktuell leer)
}
}
class Guru99Tutorial : Tutorial {
protected int TutorialID;
protected string TutorialName;
public void SetTutorial(int pID, string pName) {
TutorialID = pID;
TutorialName = pName;
}
public string GetTutorial() {
return TutorialName;
}
static void Main(string[] args) {
Guru99Tutorial pTutor = new Guru99Tutorial();
pTutor.SetTutorial(1, ".Net");
Console.WriteLine(pTutor.GetTutorial());
Console.ReadKey();
}
}
}
Der entscheidende Punkt ist, dass Guru99Tutorial die in Tutorial definierte Set-Methode nicht neu deklarieren kann; es muss die geerbte Version unverändert verwenden.
Zusammenfassung
Abstrakte Klassen in C# bieten ein robustes Fundament für den Aufbau erweiterbarer Systeme. Indem sie gemeinsames Verhalten in einer nicht instanziierbaren Basisklasse deklarieren, erzwingen Entwickler einen Vertrag, während abgeleitete Klassen konkrete Implementierungen liefern. Dieses Muster fördert Code-Wiederverwendung, Klarheit und starke Typisierung in großen Codebasen.
C Sprache
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C++ Operatoren erklärt: Typen, Beispiele und Beispielprogramme
- C++ Structs erklärt mit praktischem Beispiel
- std::list in C++ meistern: Syntax, Funktionen & praktische Beispiele
- C++ Struct vs. Class: Wichtige Unterschiede, Syntax und beste Anwendungsfälle
- C# Abstrakte Klassen: Praktisches Tutorial mit Code-Beispielen
- Interface vs. Abstrakte Klasse in Java: Die richtige Abstraktion wählen
- Java Abstraktion erklärt: Code vereinfachen & Lesbarkeit steigern
- Datenabstraktion in C++: Interface-Implementierung-Trennung
- C++ Interfaces: Abstrakte Klassen & Pure Virtual Functions