Во время чтения документации Microsoft я наткнулся на такой интересный пример кода:
interface ISomeInterface
{...}
class SomeClass
{...}
class MyClass<T>
{
void SomeMethod(T t)
{
ISomeInterface obj1 = (ISomeInterface)t;//Compiles
SomeClass obj2 = (SomeClass)t; //Does not compile
}
}
Это означает, что вы можете использовать свой родовой интерфейс явно, но не для класса, если у вас нет ограничения. Ну, я все еще не могу понять логику решения, так как оба класса и литья класса бросают исключения, поэтому почему бы защитить один из этих исключений?
BTW - есть способ об ошибке компиляции, но это не устраняет логический беспорядок в моей голове:
class MyOtherClass
{...}
class MyClass<T>
{
void SomeMethod(T t)
{
object temp = t;
MyOtherClass obj = (MyOtherClass)temp;
}
}