Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Универсальные шаблоны 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# запрещает это; Единственными допустимыми конструкциями языка являются те, которые могут быть выведены из ограничений.