Почему существует ограничение на явное приведение универсального типа к типу класса, но нет ограничений на приведение универсального типа к типу интерфейса?

Читая документацию Microsoft, я наткнулся на такой интересный пример кода:

interface ISomeInterface
{...}
class SomeClass
{...}
class MyClass<T> 
{
   void SomeMethod(T t)
   {
      ISomeInterface obj1 = (ISomeInterface)t;//Compiles
      SomeClass      obj2 = (SomeClass)t;     //Does not compile
   }
}

Это означает, что вы можете явно привести свой универсальный шаблон к интерфейсу, но не к классу, если у вас нет ограничения. Что ж, я до сих пор не могу понять логику этого решения, поскольку приведение типов интерфейса и класса вызывает исключения, так почему же нужно защищать только от одного из этих исключений?

Кстати, есть способ обойти ошибку компиляции, но это действительно так. не убрать логический бардак в голове:

class MyOtherClass
{...}

class MyClass<T> 
{

   void SomeMethod(T t)

   {
      object temp = t;
      MyOtherClass obj = (MyOtherClass)temp;

   }
}
18
задан Yurii Hohan 1 November 2011 в 08:50
поделиться