Дженерики являются формой параметрического полиморфизма, найденного в диапазоне языков, включая языки.NET, Java, Быстро, и Ржавчину.

являются функцией языка, которая, как находят на определенных языках, включила форму . Они обычно позволяют программисту выражать понятия, такие как "Список некоторого типа T" безопасным с точки зрения типов способом. До добавления дженериков на язык и , программисты, использующие эти языки, были вынуждены к удрученному от основы Object при использовании некоторых классов общего назначения, таких как классы набора.

С добавлением программист может вместо этого использовать типы такой как List<int> создать безопасные с точки зрения типов списки, которые только хранят int объекты.

Всесторонняя деталь для примеров и понятий специально для Дженериков C# обеспечивается Microsoft здесь. Информация о дженериках Java может быть найдена здесь.

В отличие от , дженерики обычно ограничиваются простой заменой типа без способности шаблонов специализироваться на определенных типах (печально известно неправильно используемый в библиотеке стандарта C++ в std::vector<bool> который ведет себя радикально отличающийся от любого другого std::vector<T>). Это также означает, что дженерики не хорошо подходят для , которое обычно полагается на способность адаптировать универсальные алгоритмы для определенных типов параметра (снова использующий пример C++, указатели применимы с любым универсальным алгоритмом, ожидая, что аргументы будут итераторами).

Java универсальные учебные руководства

  1. Общие методы Java и универсальные классы Учебные руководства
  2. Часто задаваемые вопросы дженериков Java

.NET универсальные учебные руководства

  1. Введение в дженерики
  2. Дженерики C#

Пример

C# без дженериков

var list = new System.Collections.ArrayList(); list.Add(1); list.Add("banana"); // will compile int n = (int) list[0]; int s = (int) list[1]; // will compile, but throws an InvalidCastException 

C# с дженериками

var list = new System.Collections.Generic.List<int>(); list.Add(1); //list.Add("banana"); -- Will not compile int n = list[0]; //string s = list[1]; -- will not compile