В принципе наследования C # интерфейсы могут наследоваться несколько раз, но класс один раз. Поскольку наследование от интерфейсов имеет сложную иерархию, инфраструктуре .net не нужно обеспечивать общий тип T конкретным интерфейсом во время компиляции. (EDIT). Напротив, классу может быть обеспечен определенный класс с объявлением ограничения типа при компиляции в виде следующего кода.
class MyClass<T> where T : SomeClass
{
void SomeMethod(T t)
{
ISomeInterface obj1 = (ISomeInterface)t;
SomeClass obj2 = (SomeClass)t;
}
}