請參見下面這個簡單的鑄件例如:關於.NET繼承/鑄造的東西,我不明白?
int i = 1000;
object o = (object)i; // cast
i.CompareTo(1000);
o.CompareTo(1000); // error
我明白爲什麼最後一行產生一個錯誤。與整數不同,對象不執行IComparable
,因此不公開CompareTo
方法。以下內容也會產生一個錯誤:
string s = (string)i; // cast error
由於int和string之間沒有繼承關係,所以在這裏鑄造將不起作用。現在,來看看這個:
AudioRender a = new AudioRender();
IBaseFilter b = (IBaseFilter)a; // cast
a.Run(1000); // error
b.Run(1000);
(這些類來自DirectShowNet library)
我不明白這一點。該轉換不會產生錯誤,並且在運行時不會引發異常,所以我假設AudioRender實現了IBaseFilter。然而,AudioRender不公開任何的IBaseFilter的方法,這表明我上面的假設是錯誤的...
如果a
工具b
,爲什麼不a
暴露的b
的方法呢?
否則,如果a
不執行b
,爲什麼a
可以被轉換爲b
?
此外,我可以在不使用DirectShowNet的情況下重現此行爲嗎?
即使是這樣,請問是怎麼回答問題? – Oded
,因爲它可以讓你投射到另一種類型而不會成爲基礎類型 –
當然,但這不是OP所看到的。 OP正在收到他們投下的錯誤_unless_。你所說的就是根本不需要施放。 – Oded