Как при использовании необобщённого интерфейса происходит упаковка значимого типа?

Всем привет! Извиняюсь за, может быть, глупый вопрос, но... В книге Рихтера написано:

... для CLR также исключительно важна поддержка обобщенных интерфейсов. Без них любая попытка работы со значимым типом через необобщенный интерфейс всякий раз будет приводить к необходимости упаковки и потере безопасности типов в процессе компиляции, что сильно сузило бы область применения обобщенных типов.

Объясните, пожалуйста, кто-нибудь на примере как без применения обобщённого интерфейса происходит упаковка значимых типов. Что-то я не понимаю.


Ответы (1 шт):

Автор решения: Николай

Разобрался. Код ниже:

void TestInterfaces(){
    int p = 34; int c = 35;

    IComparable cmp1 = p;
    cmp1.CompareTo(c); // <--- Необобщённые интерфейс. Упаковка т.к. ожидается object, а ему скармливается int

    IComparable<int> cmp2 = p;
    cmp2.CompareTo(с); // <--- Обобщённые интерфейс. Нет упаковки т.к. ожидается int
}

TestInterfaces();
→ Ссылка