C# Dispose()影响它不应该使用的变量';T
我是C#新手,在处理一个变量时遇到了麻烦,因为它似乎会影响另一个不应该影响的变量。代码的简化版本为:C# Dispose()影响它不应该使用的变量';T,c#,C#,我是C#新手,在处理一个变量时遇到了麻烦,因为它似乎会影响另一个不应该影响的变量。代码的简化版本为: class Game { Bitmap image; public Game(Bitmap image) { this.image = image; } } ... Bitmap tempConvert; ... tempConvert = new Bitmap(100, 100); games.Add(new Game(tempConvert
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.image,然后被处理掉。除了tempConvert.Dispose()似乎也会影响Game.image之外。并没有指针、地址或任何东西,所以我不知道为什么Game.image会受到影响。删除tempConvert.Dispose()可以解决问题,但会造成大量内存泄漏
那么,如果tempConvert的内容已经被传递,为什么tempConvert.Dispose()会影响Game.image呢?
位图
是一种参考类型。当您将其传递给新游戏
时,您正在传递对位图
的同一实例的引用。根据所需的生命周期和使用位图的其他位置,制作另一份位图的副本或让游戏类处理它。位图
是一种参考类型。当您将其传递给新游戏
时,您正在传递对位图
的同一实例的引用。根据所需的生命周期和使用位图的其他位置,制作另一份位图
或让游戏
类处理它。将位图对象的引用传递给游戏类,而不是位图的内容。创建1个位图对象,而不是更多;位图对象由初始代码和游戏对象使用
因此,在初始代码中处理它将影响游戏对象。您将位图对象的引用传递给游戏类,而不是位图的内容。创建1个位图对象,而不是更多;位图对象由初始代码和游戏对象使用
因此,在初始代码中处理它会影响游戏对象。听起来你可能需要阅读,你不必处理位图我显示的代码循环了几千次,因此如果我不处理该位图,随后的内存泄漏会使程序崩溃。@user12864说位图是通过引用传递的。它没有镀铜。它不需要额外的内存泄漏。所以别担心。如果你真的不再需要它,你可以处理它。听起来你可能需要阅读,你不必处理位图。我显示的代码循环了几千次,因此如果我不处理该位图,随后的内存泄漏会使程序崩溃。正如@user12864所说的位图是通过引用传递的。它没有镀铜。它不需要额外的内存泄漏。所以别担心。如果你真的不再需要它,你可以处理它。它只是传递一个引用,而不是值。这就解释了。谢谢。那么,它只是传递一个引用,而不是值。这就解释了。谢谢。也谢谢你的帮助。也谢谢你的帮助。