在閱讀微軟的文檔,我無意中發現了這樣一個有趣的代碼示例:爲什麼顯式將泛型轉換爲類類型有限制,但是將泛型轉換爲接口類型沒有限制?
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/,發現它時,試圖找到解釋。擾亂警報 - 可能會讓你更加困惑!;) –