Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
C# Generics- och C++-mallar är båda språkfunktioner som ger stöd för parametriserade typer. Det finns dock många skillnader mellan de två. På syntaxnivå är C#-generiska objekt en enklare metod för parametriserade typer utan komplexiteten i C++-mallar. Dessutom försöker C# inte tillhandahålla alla funktioner som C++-mallar tillhandahåller. På implementeringsnivå är den primära skillnaden att generiska typutbyten i C# utförs vid körningstid och generisk typinformation bevaras därmed för instansierade objekt. För mer information, se Generiska typer i körmiljö.
Följande är de viktigaste skillnaderna mellan C#Generics och C++-mallar:
- C#-generika ger inte samma flexibilitet som C++-mallar. Det går till exempel inte att anropa aritmetiska operatorer i en allmän C#-klass, även om det är möjligt att anropa användardefinierade operatorer. 
- C# tillåter inte mallparametrar som inte är av typen , till exempel - template C<int i> {}.
- C# stöder inte explicit specialisering. en anpassad implementering av en mall för en viss typ. 
- C# stöder inte partiell specialisering: en anpassad implementering för en delmängd av typargumenten. 
- C# tillåter inte att typparametern används som basklass för den generiska typen. 
- C# tillåter inte att typparametrar har standardtyper. 
- I C# kan en generisk typparameter inte vara en allmän parameter, även om konstruerade typer kan användas som generiska objekt. C++ tillåter mallparametrar. 
- C++ tillåter kod som kanske inte är giltig för alla typparametrar i mallen, som sedan kontrolleras för den specifika typ som används som typparameter. C# kräver att kod i en klass skrivs på ett sådant sätt att den fungerar med alla typer som uppfyller begränsningarna. I C++ är det till exempel möjligt att skriva en funktion som använder de aritmetiska operatorerna - +och- -på objekt av typen parameter, vilket ger ett fel vid tidpunkten för instansiering av mallen med en typ som inte stöder dessa operatorer. C# tillåter inte detta; de enda språkkonstruktioner som tillåts är de som kan härledas från begränsningarna.