Это видео на YouTube действительно демонстрирует важность общих ограничений https://www.youtube.com/watch?v=GlqBRIgMgho.
Теперь ниже приведен длинный текстовый ответ.
«Generic's помогает отделить логику от типа данных. Так что мы прикрепить любой тип данных с какой-либо логики для высокого повторного использования.»
Но много раз какая-то логика может быть присоединена только к определенным типам данных.
public class CompareNumeric<UNNKOWDATATYPE>
{
public bool Compareme(UNNKOWDATATYPE v1, UNNKOWDATATYPE v2)
{
if (v1 > v2)
{return true;}
else
{return false;}
}
}
Например, приведенный выше простой класс, который выполняет сравнение, если одно число больше другого числа. Теперь большее и меньшее, чем сравнение, очень специфично для числовых типов данных. Подобное сравнение не может быть выполнено для нечисловых типов, таких как string.
Так что если кто-то использует классы с типом «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» ключевое слово после того, как общий класс, как показано в приведенном ниже коде. Теперь, если какой-либо клиент пытается подключить «строковый» тип данных с указанным ниже классом, он не позволит, что позволяет избежать нежелательных результатов.
http://msdn.microsoft.com/en-us/library/d5x73970.aspx – zebrabox