Это видео на YouTube на самом деле демонстрирует важность общих ограничений https://www.youtube.com/watch?v=GlqBRIgMgho.
Теперь ниже приводится длинный текстовый ответ.
«Обобщение помогает отделить логику оттип данных.Таким образом, мы присоединяем любой тип данных с любой логикой для высокой степени повторного использования ».
Но часто некоторые логики могут быть привязаны только к определенным типам данных.
public class CompareNumeric<UNNKOWDATATYPE>
{
public bool Compareme(UNNKOWDATATYPE v1, UNNKOWDATATYPE v2)
{
if (v1 > v2)
{return true;}
else
{return false;}
}
}
Например, выше приведен простой обобщенный класс, который выполняет сравнение, если одно число больше другого числа.Теперь сравнение больше и меньше очень специфично для числовых типов данных.Подобные сравнения не могут быть выполнены для нечисловых типов, таких как строка.
Так что, если некоторые используют классы с типом «int», это совершенно допустимо.
CompareNumeric<int> obj = new CompareNumeric<int>();
bool boolgreater = obj.Compare(10,20);
Если кто-то использует его с«Двойной» тип данных снова совершенно корректен.
CompareNumeric<double> obj = new CompareNumeric<double>();
bool boolgreater = obj.Compare(100.23,20.45);
Но использование строкового типа данных с этой логикой приведет к нежелательным результатам.Поэтому мы хотели бы ограничить или наложить ограничение на то, какие типы могут быть присоединены к универсальному классу. Это достигается с помощью «универсальных ограничений».
CompareNumeric<string> obj = new CompareNumeric<string>();
bool boolgreater = obj.Compare(“interview”,”interviewer”);
Универсальный тип может быть ограничен указанием типа данныхиспользуя ключевое слово «WHERE» после универсального класса, как показано в приведенном ниже коде.Теперь, если какой-либо клиент попытается присоединить «строковый» тип данных с помощью приведенного ниже класса, он не допустит этого, что позволит избежать нежелательных результатов.
public class CompareNumeric<UNNKOWDATATYPE> where UNNKOWDATATYPE : int, double
{
}