我正在尝试阅读一本关于学习 C# 的书,但我遇到了一个绊脚石。我们应该构建一个有 4 条狗在屏幕上奔跑的应用程序,一个赛道模拟器。我已经完成了大部分工作,除了让狗在轨道上移动的机制。所以,首先我在另一个类文件中声明了 Greyhound 类:
public class Greyhound
{
public int StartingPosition;
public int RaceTrackLength;
public PictureBox MyPictureBox = null;
public int Location = 0;
public int Lane = 0;
public Random Randomizer;
public void Run() //Makes the dog move down the track.
{
Location += Randomizer.Next(0, 4);
MyPictureBox.Location = new Point(Location, Lane);
}
}
然后,在我的 form1.cs 中,我有这两个位来初始化对象:
public void LoadDogs()
{
Greyhound Dog1 = new Greyhound()
{
StartingPosition = 30,
MyPictureBox = pictureBox2, //Pointer at the picture box for this dog.
Location = 30, //X cordinates of the picture box
Lane = 21 //Y cordinates of the picutre box
};
}
public Form1()
{
InitializeComponent();
LoadDogs();
}
我遇到的问题是我不能在不破坏对象初始化的情况下使 Dog1.Run() 实际工作。
如果我尝试将 Dog1.Run() 放入 timer1_Tick 事件中,它会抱怨“当前上下文中不存在名称‘Dog1’。”
如果我将实例化“Greyhound Dog1 = new Greyhound()......”放在主要区域内而不是方法的一部分,我可以纠正这个问题。但随后我收到有关我试图引用的图片框的错误消息:“字段初始化程序无法引用非静态字段、方法或属性 'DayAtTheTrack.Form1.pictureBox2'”
如何在 C# 中处理范围仍然让我有些困惑。