1

基本的にこれをやりたいです。aaは不正なキャスト例外を引き起こします。
注:oは何でもかまいません。Bではなく、C、D、E、Fなどである可能性があります。ただし、oがAに型キャストできるクラスである限り、これは機能するはずです(Bはそのようなクラスです。暗黙の演算子オーバーロードを使用します)

        var b = (B)"sz";
        var a = (A)b;
        object o = b;
        var aa = (A)o;
4

1 に答える 1

4

次のことをやってみましたか?

[...]
var ee = (A)(B)o;

これが機能し、コードが機能しない理由は、そのような明示的なキャストが静的にコンパイルされるためです。言い換えると(A)o、コンパイラがオブジェクトからへの明示的なキャストをA探し、それを見つけられないと言うとき。ただし、それはAオブジェクトのサブクラスであると判断されるため、キャストは実行時に実行可能である可能性があります。また、インスタンスをタイプのフィールドに実行時にダウンキャストする試みを挿入しますA。このようなランタイムキャストは、明示的および/または暗黙的な変換とは何の関係もありません。これらは、組み込みの型階層規則に従うだけです。

もう一つの例:

object o = 1.0;
int i = (int)o; //throws InvalidCastException - even though (int)1.0 is OK.
于 2010-03-21T11:28:15.990 に答える