次の簡単なキャストの例を参照してください。
int i = 1000;
object o = (object)i; // cast
i.CompareTo(1000);
o.CompareTo(1000); // error
最後の行でエラーが発生する理由を理解しました。intsとは異なり、オブジェクトは実装されないIComparable
ため、メソッドを公開しませんCompareTo
。次の場合もエラーが発生します。
string s = (string)i; // cast error
intとstringsの間に継承がないため、ここではキャストは機能しません。さて、これを見てください:
AudioRender a = new AudioRender();
IBaseFilter b = (IBaseFilter)a; // cast
a.Run(1000); // error
b.Run(1000);
(これらのクラスはDirectShowNetライブラリから取得されます。)
わかりません。キャストはエラーを生成せず、実行時に例外をスローしないため、AudioRenderはIBaseFilterを実装していると思います。ただし、AudioRenderはIBaseFilterのメソッドを公開しておらず、上記の仮定が間違っていることを示しています...
a
を実装する場合、なぜのメソッドを公開b
しないのですか?
それ以外の場合、実装されていない場合、なぜキャストできますか?
また、DirectShowNetを使用せずにこの動作を再現できますか?a
b
a
b
a
b