可能重複:
Compile-time and runtime casting c#爲什麼不C#編譯器趕上一個InvalidCastException
據我瞭解,下面的代碼將總是編譯,並且將另外總是通過投擲InvalidCastException
在運行時失敗。
例子:
public class Post { }
public class Question : Post { }
public class Answer : Post
{
public void Fail()
{
Post p = new Post();
Question q = (Question)p; // This will throw an InvalidCastException
}
}
我的問題是...
- 如果我的假設是關閉,然後有人可以提供一個例子演示一下怎麼了?
- 如果我的假設是正確的,那麼編譯器爲什麼不警告這個錯誤?
爲什麼你期望編譯器遵循所有可能的代碼路徑來確定'p '在演員演出之前沒有改變過? –
如果事件沒有改變,Post可以實現一個隱式操作符來將自己投射到Question上,反之亦然。 – PVitt
演員是牛仔,上公牛和騎寶寶 – kenny