Unterschiede zwischen C++-Vorlagen und C#-Generika (C#-Programmierhandbuch)
Aktualisiert: November 2007
Bei C#-Generika und C++-Vorlagen handelt es sich um Sprachfeatures, die parametrisierte Typen unterstützen. Es gibt jedoch viele Unterschiede zwischen diesen Sprachfeatures. Auf der Syntaxebene sind C#-Generika ein einfacherer Ansatz für parametrisierte Typen, denn sie haben nicht die Komplexität von C++-Vorlagen. Außerdem versucht C# nicht, die gesamte Funktionalität zur Verfügung zu stellen, die C++-Vorlagen bereitstellen. Auf der Implementierungsebene besteht der Hauptunterschied darin, dass die Ersetzung generischer C#-Typen zur Laufzeit erfolgt und die Informationen zum generischen Typ instanziierter Objekte erhalten bleiben. Weitere Informationen hierzu finden Sie unter Generika zur Laufzeit (C#-Programmierhandbuch).
Zwischen C#-Generika und C++-Vorlagen bestehen im Wesentlichen folgende Unterschiede:
C#-Generika bieten nicht dieselbe Flexibilität wie C++-Vorlagen. So ist es zum Beispiel nicht möglich, in einer generischen C#-Klasse arithmetische Operatoren aufzurufen. Benutzerdefinierte Operatoren können jedoch aufgerufen werden.
C# lässt keine nicht typisierten Vorlagenparameter zu, z. B. template C<int i> {}.
C# unterstützt keine explizite Spezialisierung, d. h. die benutzerdefinierte Implementierung einer Vorlage für einen bestimmten Typ.
C# unterstützt keine partielle Spezialisierung, d. h. die benutzerdefinierte Implementierung für eine Teilmenge der Typargumente.
C# lässt nicht zu, dass der Typparameter als Basisklasse für den generischen Typ verwendet wird.
C# unterstützt keine Standardtypen für Typparameter.
In C# kann ein generischer Typparameter nicht selbst generisch sein, obwohl konstruierte Typen als Generika verwendet werden können. C++ lässt Vorlagenparameter zu.
C++ lässt Code zu, der möglicherweise nicht für alle Typparameter einer Vorlage gültig ist. Die Gültigkeit wird für den spezifischen Typ überprüft, der als Typparameter verwendet wird. In C# muss der Code in einer Klasse so geschrieben werden, dass er für alle Typen gültig ist, die die Einschränkungen erfüllen. So ist es zum Beispiel in C++ möglich, eine Funktion zu schreiben, die die arithmetischen Operatoren + und - auf Objekte des Typparameters anwendet. Dies führt bei der Instanziierung der Vorlage zu einem Fehler, wenn der bei der Instanziierung verwendete Typ diese Operatoren nicht unterstützt. C# lässt dies nicht zu. Es werden lediglich solche Sprachkonstrukte zugelassen, die aus den Einschränkungen abgeleitet werden können.
Siehe auch
Konzepte
Referenz
Einführung in Generika (C#-Programmierhandbuch)