title: explicitly cast generic type parameters to any interface
body: <p>In <a href="http://msdn.microsoft.com/en-us/library/aa479858.aspx" rel="noreferrer">Generics FAQ: Best Practices</a> says :</p>
  
  <p>The compiler will let you explicitly cast generic type parameters to any interface, but not to a class:</p>
  
  <pre><code>interface ISomeInterface
  {...}
  class SomeClass
  {...}
  class MyClass&lt;T&gt; 
  {
     void SomeMethod(T t)
     {
        ISomeInterface obj1 = (ISomeInterface)t;//Compiles
        SomeClass      obj2 = (SomeClass)t;     //Does not compile
     }
  }
  </code></pre>
  
  <p>I see limitation reasonable for both, classes and interfaces, unless the class/interface is not specified as constraint type.</p>
  
  <p>So why such behavior, why it is allowed for interfaces ? </p>