Различия между шаблонами языка C++ и универсальными шаблонами языка C# (Руководство по программированию в C#)
Универсальные шаблоны языка C# и шаблоны языка C++ являются функциями языков программирования, обеспечивающими поддержку параметризированных типов.Но между ними существует много различий.На уровне синтаксиса универсальные шаблоны языка C# являются более простым подходом к параметризованным типам, исключающим сложность шаблонов языка C++.Кроме того, в языке C# не делается попытки обеспечить все функциональные возможности, обеспечиваемые шаблонами языка C++.На уровне реализации основное отличие заключается в том, что замена универсальных типов языка C# выполняется во время выполнения и информация универсальных типов, таким образом, сохраняется для экземпляров объектов.Дополнительные сведения см. в разделе Универсальные типы во время выполнения (Руководство по программированию в C#).
Ниже приведены основные различия между шаблонами языка C++ и универсальными шаблонами языка C#:
Универсальные шаблоны языка C# не обеспечивают такую же гибкость, как шаблоны языка C++.Например, невозможно вызвать арифметические операторы в универсальном классе языка C#, хотя можно вызвать операторы, определенные пользователем.
Язык C# не позволяет использовать не являющиеся типами параметры шаблона, например template C<int i> {}.
Язык C# не поддерживает явную специализацию, т.е. индивидуальную реализацию шаблона для конкретного типа.
Язык C# не поддерживает частичную специализацию: индивидуальную реализацию для подмножества аргументов типа.
Язык C# не позволяет использовать параметр типа в качестве базового класса для универсального типа.
Язык C# не позволяет параметрам типов иметь типы по умолчанию.
В языке C# параметр универсального типа не может сам быть универсального типа, хотя сконструированные типы могут использоваться как универсальные.Язык C++ не допускает использование параметров шаблона.
Язык C++ позволяет использование кода, который может быть допустимым не для всех параметров типа в шаблоне и который затем проверяется для конкретного типа, используемого в качестве параметра типа.В языке C# код класса должен быть написан таким образом, чтобы он работал с любым типом, удовлетворяющим требования существующих ограничений.Например, в языке C++ можно написать функцию, которая использует арифметические операторы + и - применительно к объектам параметра типа, что приведет к ошибке во время создания экземпляра шаблона с типом, который не поддерживает эти операторы.Язык C# не позволяет это делать. Допускаются только те языковые конструкции, которые могут быть выведены из ограничений.
См. также
Ссылки
Введение в универсальные шаблоны. (Руководство по программированию на C#)
Основные понятия
Руководство по программированию на C#