@Ksushqa
Unity developer

Как разобраться с обобщенными типами?

Читаю статью про делегаты. Вроде все понятно, но встретились обобщенные типы, с которыми до конца не разобралась. На интуитивном уровне понятны связи в коде, но...
delegate T Operation<T, K>(K val);
 
class Program
{
    static void Main(string[] args)
    {
        Operation<decimal, int> op = Square;
 
        Console.WriteLine(op(5));
        Console.Read();
    }
 
    static decimal Square(int n)
    {
        return n * n;
    }
}

Если озвучить конкретно строку:
delegate T Operation<T, K>(K val);
то получится что-то вроде: "Объявляем делегат с возвращаемым значением типа T, который называется Operation, а параметры делегата – это значение val типа К". Правильно? Куда прикрутить Operation в этой фразе. Что такое <T, K>? Ну, понятно, что оно указывает, какие типы используются в делегате Operate, но как это называется? Поясните русскими словами, пожалуйста.
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 1
Exomode
@Exomode
Архитектор ПО
Дженерики - это когда вы предполагаете использование определенных типов в контексте и вам нужно связать их по определенному критерию. Кроме того, это избавляет вас от необходимости приводить типы в дальнейшей реализации кода.

Как пример, задача: Вам нужно реализовать класс A со свойством F, которое может быть любого типа, реализованного от интерфейса IB:
Решение 1. Неоптимизированный подход без дженериков:
class A {
  IB F { get; }
}

A a = new A();
C c = a.F as C; // Здесь придется приводить к типу.

Решение 2. Вариант с дженериками:
class A<T> {
  T F { get; }
}

A<C> a = new A<C>();
C c = a.F; // Здесь лежит сразу экземпляр типа C, приводить к типу не нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы