Обобщенные типы отличаются в зависимости от типов-аргументов

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

iOb = strOb; //Не верно!

Даже несмотря на то, что iOb и strOb имеют тип Gen, они являются ссылками на разные типы, потому что типы их параметров отличаются. Это часть того способа, благодаря которому обобщения добавляют безопасность типов и предотвращают ошибки.