Dispose() 影响一个不应该影响的变量?



我是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对象。

最新更新