-5

このプログラムの出力は次のとおりです: 0 0

なぜこの種の出力が得られるのか教えてください。

namespace ConsoleApplication
{
    class Sample
    {
        int i;
        Single j;
        public void SetData(int i, Single j)
        {
            i = i;
            j = j;
        }

        public void Display()
        {
            Console.WriteLine(i + " " + j);
        }
    }

    class MyProgram
    {
        static void Main(string[ ] args)
        {
            Sample s1 = new Sample();
            s1.SetData(10, 5.4f);
            s1.Display();
        }
    }
}
4

2 に答える 2

1

このプログラムの出力は になります0 0。methodSetData()と同様に、同じ変数に値を代入していますが、その変数はそのスコープにのみ入っています。したがって、値はクラスの変数に割り当てられません。値をクラス変数に割り当てたい場合は、SetData()メソッドを次のように変更するだけです

    public void SetData(int i, Single j)
    {
        this.i = i;
        this.j = j;
    }

これは機能します。

この説明がお役に立てば幸いです。:)

于 2013-06-22T05:40:22.620 に答える
1

SetDataメソッド、変数i、およびメソッドjのローカル変数であるため、出力として 0, 0 を取得しています。このため、クラスレベルの変数が割り当てられていませんij

public void SetData(int i, Single j)
    {
        i = i;
        j = j;
    }

上記のコードを次のように変更します。

public void SetData(int i, Single j)
    {
        this.i = i; // using this will refer to the class level variables 
        this.j = j;
    }

または、ローカル変数に別の名前を付けることができます。その場合、ローカル変数はクラス レベルの変数を隠しません。

public void SetData(int a, Single b)
    {
        i = a;
        j = b;
    }

出力は 10 と 5.4 になります

于 2013-06-22T05:41:52.107 に答える