-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. 与在方法SetData()中一样,您将值分配给相同的变量,这些变量仅在该范围内。因此,该值未分配给类的变量。如果要将值分配给类变量,则只需将SetData()方法修改为

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

这将起作用。

我希望这个解释会对你有所帮助。:)

于 2013-06-22T05:40:22.620 回答
1

你得到 0, 0 作为输出,因为在SetData方法中,变量是方法ij局部变量。正因为如此,你的类级别变量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 回答