2

クラスには、2 つのメソッドがあります。method1 でオブジェクトを作成しましたが、同じオブジェクトを method2 で使用することはできません。

なんで?簡単な例で助けてください。

コーディングが大きすぎるため、レイアウトを指定しました

public class Sub
{
}

public class DataLoader
{
    public void process1()
    {
        Sub obj = new Sub();
    }

    public void process2()
    {
        // here I can't use the object
    }
}
4

4 に答える 4

7

これが機能しない理由はスコープです。ローカル変数には、宣言されているブロックからのみアクセスできます。複数のメソッドからアクセスするには、フィールドを追加するか、パラメーターとして他のメソッドに渡します。

分野:

class YourClass
{
    object yourObject;

    void Method1()
    {
        yourObject = new object();
    }

    void Method2()
    {
        int x = yourObject.GetHashCode();
    }
}

パラメータ:

class YourClass
{
    void Method1()
    {
        Method2(new object());
    }

    void Method2(object theObject)
    {
        int x = theObject.GetHashCode();
    }
}
于 2012-09-15T13:41:08.793 に答える
2

クラスではメンバー変数を使用する必要があります。

public class DataLoader
{
    private Sub mySub;

    public void Process1()
    {
        mySub = new Sub();
    }

    public void Process2()
    {
        if(mySub == null) 
            throw new InvalidOperationException("Called Process2 before Process1!");            

        // use mySub here
    }
}

さまざまな変数スコープ (具体的には、この場合はインスタンス変数) について調べてください。回答で言及されているcodesparkleのように、オブジェクトをパラメーターとして渡すこともできます。

于 2012-09-15T13:36:21.700 に答える
1

簡単な答えは (コードを表示せずに)、 で作成されたオブジェクトには、Method1では可視性またはスコープがないということMethod2です。

ここには、特定の問題を解決する方法を示すいくつかの良い回答が既にあります。しかし、ここでの本当の答えは、一般的にScopeの概念に慣れることです。それはプログラミングの基本的な部分であり、それについてもっと学ぶことはあなたを大いに助けるでしょう.

このテーマに関する多くの優れた記事やビデオがあります。このビデオは素晴らしいスタートです。幸運を!

于 2012-09-15T13:59:46.543 に答える
0

オブジェクトをクラス フィールドとして設定する必要があります。そうすれば、クラスのすべてのメソッドからアクセスできます。

于 2012-09-15T13:36:40.660 に答える