In Generics FAQ: Best Practices says :
The compiler will let you explicitly cast generic type parameters to any interface, but not to a class:
interface ISomeInterface
{...}
class SomeClass
{...}
class MyClass<T>
{
void SomeMethod(T t)
{
ISomeInterface obj1 = (ISomeInterface)t;//Compiles
SomeClass obj2 = (SomeClass)t; //Does not compile
}
}
I see limitation reasonable for both, classes and interfaces, unless the class/interface is not specified as constraint type.
So why such behavior, why it is allowed for interfaces ?