Was ist ein abstrakter Datentyp in C#?

3 Antworten

Abstrakte Datentypen in C# sind die Klassen.

Was sie abstrakt macht, ist die Tatsache, dass Teile von ihnen als "private" oder "protected" gekennzeichnet sein können, womit Anwender von Objekten dieser Klasse auf die entsprechenden Teile oder Methoden dieser Objekte dann keinen direkten Zugriff mehr haben.


grtgrt  17.06.2021, 18:58
@WitchHunter0815

Der Begriff "abstrakter Datentyp" war schon in den 1970-er Jahren geprägt worden — noch bevor es objektorientierte Sprachen gab. Er steht für etwas deutlich Allgemeineres als nur eine abstrakte Klasse im Sinne von C# (Aber natürlich kann auch sie als abstrakter Datentypen gesehen werden: soagar als einer, der i.A. mehrere unterschiedliche Implementierungen haben wird).

0
WitchHunter0815  18.06.2021, 13:52
@grtgrt

Es mag sein, dass dieser Begriff diese Bedeutung in den 1970ern hatte.
Aber der FS hat explizit nach der Abstrakt in Bezug auf C# gefragt. Ergo denke ich, dass er mit dieser Antwort eigentlich nichts anfangen kann - ich gehe davon aus, dass er gerade versucht C# zu lernen und dem entsprechend sollte man ihm auch gezielte Antworten bezogen auf diese Sprache geben.

0

ein generischer/abstrakter Datentyp ist eine Klasse, die Typparameter annimmt. Es wird somit möglich Klassen zu erzeugen, die vom zugrunde liegenden Typen abstrahieren.

Also nehmen wir mal ein Beispiel aus der Praxis. Es gibt z.B. eine Klasse List<T>, wobei das T für den Typparameter steht. Diese Klasse bietet eine ziemlich nützliche Logik an (Find, Sort Methoden und dergleichen). Diese eigentliche Logik (Find, Sort) steht dir nun für jeden Datentyp zur Verfügung. Also z.B. auch für eine eigene Klasse User, die du selbst geschrieben hast und in der List speichern möchtest.

Wenn wir das mal mit dem nicht generischen Vorgänger - der ArrayList - vergleichen, so konntest du hier nur vordefinierte Typen in die Liste packen (int, string, object etc.).

Du hättest also in dem oben genannten Fall vermutlich deine User als Object in die ArrayList gepackt. Das bedeutet allerdings auch, dass du dann an anderer Stelle wieder casten müsstest. Du kannst also mit generischen Datentypen auch viel typsicherer programmieren.


WitchHunter0815  17.06.2021, 16:35

Du beschreibst hier einen generischen Datentypen, nicht den abstrakten Datentypen.

Ein abstrakter Datentyp ist eine Klasse, die nicht selbst instanziert werden kann, sondern nur als "vorläufige" Beschreibung einer davon ableitenden Klasse dient bzw. Gemeinsamkeiten der Erben bereits vordefiniert.

public abstract class A
{
  public abstract void Method_A();  // Muss in der erbenden Klasse überschrieben werden
  public virtual void Method_B()  // Kann in der erbenden Klasse überschrieben werden
  {
    // mach was ...
  }
}  

public class B : A // Klasse B erbt von A
{
  public override void Method_A()
  {
    // mach was ...
  }
}

/****** Snip ******/

public A = new A(); // Fehler, da A nicht instanziert werden darf
public B = new B(); // Funktioniert
0

Der abstract-Modifizierer gibt an, dass dem modifizierten Objekt eine Implementierung fehlt oder dass diese unvollständig ist. Der abstract-Modifizierer kann für Klassen, Methoden, Eigenschaften, Indexer und Ereignisse verwendet werden. Verwenden Sie den abstract-Modifizierer in einer Klassendeklaration, um anzugeben, dass die Klasse nur die Basisklasse für andere Klassen sein und nicht selbst instanziiert werden soll. Als abstrakt markierte Member müssen von Klassen, die von nicht abstrakten Klassen abgeleitet wurden, implementiert werden.

https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/abstract

Woher ich das weiß:Berufserfahrung – Senior-Softwaredeveloper mit 20 Jahren Berufserfahrung.