Читая документацию 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;
}
}