Обобщенные типы отличаются в зависимости от типов-аргументов
Ключевой момент в понимании обобщенных типов в том, что ссылка на одну специфическую версию обобщенного типа не совместима с другой версией того же обобщенного типа. Например, следующая строка, если ее добавить к предыдущей программе, вызовет ошибку и программа не скомпилируется:
iOb = strOb; //Не верно!
Даже несмотря на то, что iOb и strOb имеют тип Gen