Kursinhalt
Fortgeschrittenes C# mit .NET
Fortgeschrittenes C# mit .NET
Was Sind Generics?
Der Begriff Generisch bedeutet "allgemein" oder "kollektiv". Im Kontext der C#-Programmierung bedeutet generisch "nicht spezifisch für einen bestimmten (Daten-)Typ".
Generika sind eine Möglichkeit, unserem Code Flexibilität zu verleihen und ihn robuster zu machen. Durch das Erstellen einer generischen Klasse können wir die Datentypen ihrer Felder, Eigenschaften, Methodenparameter oder sogar den Methodenrückgabewert als unentschieden oder generisch belassen, und sie können später durch jeden Datentyp gefüllt werden, der zum Zeitpunkt der Objekterstellung entschieden werden kann. Wir können uns Beispiele ansehen, um dieses Konzept besser zu verstehen.
Der System.Collections.Generic
-Namensraum enthält einige auf Generika basierende Sammlungsklassen wie Listen und Wörterbücher. Wir haben bereits die Syntax zum Erstellen und Verwenden von Listen und Wörterbüchern betrachtet.
Folgendes ist die Syntax zum Erstellen eines neuen Listenobjekts:
index
new List<datatype>();
Ähnlich ist die Syntax zum Erstellen eines neuen Dictionary-Objekts:
index
new Dictionary<datatype1, datatype2>();
Wir wissen bereits, dass die grundlegende Syntax zum Erstellen eines neuen Objekts einer Klasse new ClassName(arg1, …);
ist. Im Fall von List und Dictionary gibt es jedoch Datentypen, die in spitze Klammern (<
, >
) eingeschlossen sind.
Dies liegt daran, dass sowohl List als auch Dictionary generische Typen oder Klassen sind und daher die Flexibilität bieten, Objekte zu erstellen, die jeden Datentyp unterstützen können. Daher können wir Listen und Dictionaries erstellen, die Werte jedes Datentyps speichern können, einschließlich int
, float
, double
, bool
oder sogar Objekte unserer eigenen Klassen:
index
class ExampleClass { int value; public ExampleClass(int value) { this.value = value; } } var exampleList = new List<ExampleClass>(); var exampleDict = new Dictionary<string, ExampleClass>();
Es wäre mühsam und ineffizient gewesen, wenn die List
- und Dictionary
-Klassen ohne Generics implementiert worden wären. Vielleicht hätte es mehrere verschiedene Klassen gegeben, um verschiedene Datentypen zu unterstützen, oder eine komplizierte Logik innerhalb einer einzigen Klasse, die die Unterstützung mehrerer Datentypen ermöglicht, auf Kosten der Typsicherheit, was das Risiko von Laufzeitfehlern erhöht.
Tatsächlich gibt es eine ältere Version der List-Klasse, die immer noch im System.Collections
-Namespace verfügbar ist, bekannt als ArrayList
, die eine nicht-generische Klasse ist und daher anfällig für Laufzeitfehler ist. In der Microsoft-Dokumentation wird davon abgeraten, ArrayList
zu verwenden, jedoch ist sie in den neuesten Versionen von C# immer noch enthalten, um die Abwärtskompatibilität mit älteren Programmen zu gewährleisten.
Generics bieten eine elegante Methode, um mehrere Datentypen aus einer einzigen Klasse zu unterstützen, wodurch die Wiederverwendbarkeit des Codes, die Effizienz und die Typsicherheit verbessert werden.
Die Datentyp(en), die wir zwischen den spitzen Klammern übergeben, werden als generische Typ-Parameter oder einfach Typ-Parameter bezeichnet.
1. Was ist der Hauptzweck von Generics in der Programmierung?
2. Welche dieser ist KEIN generischer Typ?
Danke für Ihr Feedback!