Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A C# Generics és a C++ sablon mindkét nyelvi funkció, amely támogatja a paraméteres típusokat. A kettő között azonban sok különbség van. A szintaxis szintjén a C#-generikusok egyszerűbb módszert jelentenek a paraméteres típusokhoz a C++ sablonok összetettsége nélkül. A C# emellett nem próbálja meg biztosítani a C++ sablonok által biztosított összes funkciót. A megvalósítás szintjén az elsődleges különbség az, hogy a C# általános típusú helyettesítéseket futtatáskor hajtják végre, és ezáltal az általános típusinformációk megmaradnak a példányosított objektumok esetében. További információ: Generics in the Runtime.
A C# Generics és a C++ sablonok közötti főbb különbségek a következők:
A C#-generikusok nem biztosítanak ugyanolyan rugalmasságot, mint a C++ sablonok. Például nem lehet számtani operátorokat meghívni egy C# általános osztályban, bár a felhasználó által definiált operátorokat is meghívhatja.
A C# nem engedélyezi a nem típusú sablonparamétereket, például
template C<int i> {}a .A C# nem támogatja az explicit specializációt; azaz egy sablon egyéni implementációja egy adott típushoz.
A C# nem támogatja a részleges specializációt: a típusargumentumok egy részhalmazának egyéni implementációja.
A C# nem engedélyezi a típusparaméter használatát az általános típus alaposztályaként.
A C# nem engedélyezi a típusparaméterek alapértelmezett típusait.
A C#-ban az általános típusparaméter önmagában nem lehet általános, bár a létrehozott típusok általános típusként használhatók. A C++ lehetővé teszi a sablonparamétereket.
A C++ lehetővé teszi, hogy olyan kód írjunk a sablonban, amely nem feltétlenül érvényes minden típusparaméterre, és ezt a kódot a rendszer ellenőrzi az adott típusra, amelyet típusparaméterként használunk. A C# megköveteli, hogy az osztályban lévő kódot úgy kell írni, hogy az bármilyen olyan típussal működjön, amely megfelel a korlátozásoknak. A C++-ban például meg lehet írni egy olyan függvényt, amely az aritmetikai operátorokat
+és-a típusparaméter objektumait használja, ami hibát okoz a sablon példányának időpontjában olyan típussal, amely nem támogatja ezeket az operátorokat. C# letiltja ezt; csak azok a nyelvi szerkezetek engedélyezettek, amelyek a korlátozásokból következtethetők.