Megosztás a következőn keresztül:


Különbségek a C++ sablonok és a C# Generics között (C# programozási útmutató)

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.

Lásd még