C#如何从另一个类中更改一个int变量

时间:2017-11-06 08:30:56

标签: c# int console-application

所以在我的控制台应用程序的这个代码块中,当运行时,应该移动' X'当你按下相应的箭头键时,在Class02中向上和向下,但它没有,它只是保持原位:

class Program
{
    static void Main(string[] args)
    {
        Class01.Function01();
    }
}

class Class01
{
    public int num01 = 5;
    public int num02 = 5;

    public static void Function01()
    {
        while (true)
        {
            Class02.Function02();
        }
    }
}

class Class02
{
    public static void Function02()
    {
        var c1 = new Class01();
        Console.SetCursorPosition(c1.num02, c1.num01);
        Console.Write("X");

        ConsoleKeyInfo keyInfo;
        keyInfo = Console.ReadKey(true);
        switch (keyInfo.Key)
        {
            case ConsoleKey.UpArrow:
                c1.num01--;
                break;
            case ConsoleKey.DownArrow:
                c1.num01++;
                break;
        }
    }
}

我知道这里的错误,Class01中的int没有在class02中被更改。因此,光标位置仍然设置为5< X' X'在每个击键的同一个地方。

那么,如何在Class02中更改int num01的值?

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:4)

您始终在静态方法Class01中创建Class02.Function02的新实例,因此值始终为默认值5.您可以将数字设置为静态,也可以在Class01中保存Class02的静态实例变量,例如:

class Class02
{
    private Class01 c1 = New Class01();

    public static void Function02()
    {
        Console.SetCursorPosition(c1.num02, c1.num01);
        Console.Write("X");

        ConsoleKeyInfo keyInfo;
        keyInfo = Console.ReadKey(true);
        switch (keyInfo.Key)
        {
            case ConsoleKey.UpArrow:
                c1.num01--;
                break;
            case ConsoleKey.DownArrow:
                c1.num01++;
                break;
        }
    }
}

另一种选择是将Class01的实例传递给方法:

public static void Function02(Class01 c1)
{
    Console.SetCursorPosition(c1.num02, c1.num01);
    Console.Write("X");

    ConsoleKeyInfo keyInfo;
    keyInfo = Console.ReadKey(true);
    switch (keyInfo.Key)
    {
        case ConsoleKey.UpArrow:
            c1.num01--;
            break;
        case ConsoleKey.DownArrow:
            c1.num01++;
            break;
    }
}

然后你用这种方式调用它:

Class01 c1 = new  Class01();
while (true)
{
    Class02.Function02(c1);
}

如果调用方法Function01不是静态的,您可以传递this

答案 1 :(得分:0)

错误是,在每次调用中,您都会创建一个包含初始值的class01的新实例。