在阅读微软的文档,我无意中发现了这样一个有趣的代码示例:为什么显式将泛型转换为类类型有限制,但是将泛型转换为接口类型没有限制?
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;
}
}
出于好奇:你能输入“SomeClass obj2 =(SomeClass)(object)t;”? –
是的,这是由第二个片段 –
完成检查这个http://philipm.at/2011/1014/,发现它时,试图找到解释。扰乱警报 - 可能会让你更加困惑!;) –