所以在我的控制台应用程序的这个代码块中,当运行时,应该移动' 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的值?
感谢您提供任何帮助。
答案 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的新实例。