繁体   English   中英

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

[英]C# How to change an int variable from one class in another

因此,在运行我的控制台应用程序的此代码块中,当您按下相应的箭头键时,应在Class02中上下移动“ X”,但实际上并没有,只是停留在原位:

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未被更改。 因此,光标位置仍设置为5 5,每次击键都在同一位置写入“ X”。

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

感谢您对此的任何帮助。

您总是在静态方法Class02.Function02创建Class01的新实例,因此该值始终是默认值5。您也可以使数字静态,也可以在Class01Class02的静态实例变量,例如:

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的实例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

错误是,在每个单独的调用中,您都会创建一个带有初始值的class01新实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM