Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
C#-Generics und C++-Templates sind Sprachfunktionen, die Unterstützung für parametrisierte Typen bieten. Es gibt jedoch viele Unterschiede zwischen den beiden. Auf Syntaxebene sind C#-Generika ein einfacherer Ansatz für parametrisierte Typen ohne die Komplexität von C++-Vorlagen. Darüber hinaus versucht C# nicht, alle Funktionen bereitzustellen, die C++-Vorlagen bereitstellen. Auf Implementierungsebene besteht der Hauptunterschied darin, dass C#-generische Typenersetzungen zur Laufzeit ausgeführt werden, und generische Typinformationen werden dadurch für instanziierte Objekte beibehalten. Weitere Informationen finden Sie unter Generics in der Runtime.
Im Folgenden sind die wichtigsten Unterschiede zwischen C# Generics- und C++-Vorlagen aufgeführt:
C#-Generika bieten nicht die gleiche Flexibilität wie C++-Vorlagen. Beispielsweise ist es nicht möglich, arithmetische Operatoren in einer generischen C#-Klasse aufzurufen, obwohl es möglich ist, benutzerdefinierte Operatoren aufzurufen.
C# lässt keine Vorlagenparameter ohne Typ zu, wie
template C<int i> {}
.C# unterstützt keine explizite Spezialisierung; d. h. eine benutzerdefinierte Implementierung einer Vorlage für einen bestimmten Typ.
C# unterstützt keine Teilspezialisierung: eine 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# lässt keine Typenparameter mit Standardtypen zu.
In C# kann ein generischer Typparameter nicht selbst ein generischer Parameter 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 in der Vorlage gültig ist, was dann auf den spezifischen Typ überprüft wird, der als Typparameter verwendet wird. C# erfordert, dass Code in einer Klasse so geschrieben wird, dass er mit jedem Typ funktioniert, der die Einschränkungen erfüllt. In C++ ist es beispielsweise möglich, eine Funktion zu schreiben, die arithmetische Operatoren
+
und-
auf Objekte des Typparameters verwendet, was beim Instanziieren der Vorlage mit einem Typ, der diese Operatoren nicht unterstützt, zu einem Fehler führt. C# verbietet dies; Die einzigen zulässigen Sprachkonstrukte sind diejenigen, die von den Einschränkungen abgeleitet werden können.