Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce jazyka C# generika a šablony jazyka C++ jsou obě prvky jazyků, které poskytují podporu pro parametrizované typy. Mezi těmi dvěma existuje mnoho rozdílů. Obecné typy jazyka C# jsou na úrovni syntaxe jednodušším přístupem k parametrizovaným typům bez složitosti šablon jazyka C++. Kromě toho se jazyk C# nepokouší poskytovat všechny funkce, které poskytují šablony jazyka C++. Na úrovni implementace je primární rozdíl v tom, že nahrazení obecného typu v jazyce C# se provádí za běhu programu a obecné informace o typu se tím zachovají pro instancované objekty. Další informace naleznete v tématu Obecné typy v modulu runtime.
Tady jsou hlavní rozdíly mezi obecnými typy jazyka C# a šablonami jazyka C++:
Obecné typy jazyka C# neposkytují stejnou flexibilitu jako šablony jazyka C++. Například není možné volat aritmetické operátory v obecné třídě jazyka C#, i když je možné volat uživatelem definované operátory.
Jazyk C# neumožňuje parametry šablony bez typu, například
template C<int i> {}.Jazyk C# nepodporuje explicitní specializaci; to znamená vlastní implementace šablony pro určitý typ.
Jazyk C# nepodporuje částečnou specializaci: vlastní implementaci pro podmnožinu argumentů typu.
Jazyk C# neumožňuje použití parametru typu jako základní třídy pro obecný typ.
Jazyk C# neumožňuje, aby parametry typu měly výchozí typy.
V jazyce C# nemůže být obecný parametr obecného typu, i když vytvořené typy lze použít jako obecné typy. C++ povoluje parametry šablony.
Jazyk C++ umožňuje kód, který nemusí být platný pro všechny parametry typu v šabloně, která se pak kontroluje pro konkrétní typ použitý jako parametr typu. Jazyk C# vyžaduje, aby kód třídy byl napsán takovým způsobem, aby fungoval s libovolným typem, který splňuje omezení. V jazyce C++ je například možné napsat funkci, která používá aritmetické operátory
+a-na objektech parametru typu, což v době vytvoření instance šablony způsobí chybu s typem, který tyto operátory nepodporuje. C# to nepovoluje; jediné povolené jazykové konstrukce jsou ty, které lze od omezení odvodit.