Generics в C# — это возможность создавать шаблоны кода, которые работают с разными типами данных, не теряя типовой безопасности. Вместо того чтобы писать один и тот же код для каждого типа данных, вы пишете один универсальный код, а конкретный тип подставляется при использовании. Это делает код более гибким, безопасным и переиспользуемым, без необходимости писать отдельную реализацию для каждого типа данных.
Пример:
public class ValueContainer
{
public T Value { get; set; }
}
Теперь во время создания объекта мы можем указать, чем реально будет являться Т. Это может быть число:
var container = new ValueContainer(); container.Value = 123;
А может быть строка:
var container = new ValueContainer(); container.Value = "Это строка";
Так как мы указываем конкретный тип при создании объекта, мы всё ещё получаем проверку типов и связанную с этим безопасность
Пример на Python
def identity(x: T) -> T:
return x
Без дженериков пришлось бы писать классы для каждого типа данных
def identity_int(x: int) -> int:
return x
def identity_str(x: str) -> str:
return x