0

プロパティとクラス変数に関するいくつかのチュートリアルを行ってきましたが、クラス変数 (以下の例では bar) を設定すると、型を呼び出してこのオブジェクトを特定の変数にキャストできることを理解しています (私はそうしました)。明確にするために、以下の例ではこれを行わないでください)。しかし、メソッドを呼び出すためにオブジェクトが既に格納されているこの同じクラス変数を使用するとどうなるでしょうか? 以下の例を参照すると、「ok」はメソッドに渡されますか、それとも単に無視されますか? このコンパイラでこれを実行しようとしましたが、問題はないようでしたが、オブジェクト バーが設定されている状態で実際に何かを行っているかどうかはわかりません。助けてくれてありがとう!

public class Foo
{

    public static void Main()
    {
        Foo bar = new Foo();
        object ok = "ok";
        bar = (Foo)ok;
        bar.genericMethod();
    }

    public void genericMethod()
    {
    }

}
4

2 に答える 2

5

いいえ、ちがいます。「クラス変数」の意味がわからない - ここにあるのは、型Fooobject. 2 番目のメソッドは、最初のメソッドに対してローカルであるため、どちらにもアクセスできません。2 番目のメソッドにアクセスを許可する場合は、次の 2 つのいずれかを実行する必要があります: 1 つをパラメーターとして 2 番目のメソッドに渡す (そのため、たとえば として定義されます)、または代わりに変数の 1 つをフィ​​ールドvoid genericMethod(Foo foo)として宣言します。、クラス レベルの両方のメソッドの外側。

コードはコンパイルされますが、実行時に行で失敗しますbar = (Foo)okobject原則として anを aにキャストすることは可能かもしれませんがFoo(aFoo は であるため object)、実際にはそう objectではなく、キャストは失敗します。

于 2012-07-12T15:51:28.847 に答える
1

コンパイルしても実行時例外、イベントがスローされます。キャストと型変換の詳細をお読みください。

于 2012-07-12T15:49:40.067 に答える