我是c#的新手,在处理变量时遇到了麻烦,因为它似乎影响了另一个不应该影响的变量。代码的简化版本是:
class Game
{
Bitmap image;
public Game(Bitmap image)
{
this.image = image;
}
}
...
Bitmap tempConvert;
...
tempConvert = new Bitmap(100, 100);
games.Add(new Game(tempConvert));
tempConvert.Dispose();
应该很简单:tempconvert被传递给Game。然后图像被处理掉。除了tempConvert.Dispose()似乎会影响Game。还有图像。没有指针,地址什么的,所以我不知道为什么。影响图像。删除tempConvert.Dispose()可以解决问题,但会造成大量内存泄漏。
那么,为什么tempConvert.Dispose()会影响Game。如果tempConvert的内容已经传递?
Bitmap
为引用类型。当您将它传递给new Game
时,您将传递对Bitmap
的相同实例的引用。要么制作Bitmap
的另一个副本,要么让Game
类处置它,这取决于所需的生命周期和Bitmap
正在使用的其他地方。
你传递的是位图对象的引用,而不是位图的内容。你创建一个位图对象,而不是更多;Bitmap对象由你的初始代码和Game对象使用。
因此,在初始代码中处理它将影响你的Game对象。