我正在研究帮助我学习C#的书,其中一个项目类似于那些旧游戏中的一个,在基础Powerpoint类(class)中进行了讲授。此特定示例使用for循环,该循环定义一个房间或区域具有多少个导出(外门)。
这是通过外门移动的示例。当我回过门,使用“MoveToANewLocation()”方法时,“currentLocation”失去了它的值(value)。随后,for循环将值设置为负,从而导致错误。
private void MoveToANewLocation(Location newLocation)
{
currentLocation = newLocation;
exits.Items.Clear();
for (int i = 0; i < currentLocation.Exits.Length; i++)
{
exits.Items.Add(currentLocation.Exits[i].Name);
}
exits.SelectedIndex = 0;
description.Text = currentLocation.Description;
if (currentLocation is IHasExteriorDoor)
{
goThroughTheDoor.Visible = true;
}
else
{
goThroughTheDoor.Visible = false;
}
}
我有一个与上述示例完全相同的引用示例,可以正常工作。当按钮“goThroughTheDoor”调用“MoveToANewLocation()”方法时,为什么currentLocation会丢失其值,对此我感到很困惑。
抱歉,如果不清楚,我对现代编程还是很陌生
最佳答案
当 MoveToANewLocation
方法开始时,它将 currentLocation
设置为参数 newLocation
的副本:
//currentLocation = newLocation;
当方法退出时
currentLocation
超出范围,垃圾收集器可以清理以将该内存用于范围内的对象。这解释了退出方法后它的值是如何丢失的。