Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Dispose()影响它不应该使用的变量';T_C# - Fatal编程技术网

C# Dispose()影响它不应该使用的变量';T

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

我是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.image,然后被处理掉。除了tempConvert.Dispose()似乎也会影响Game.image之外。并没有指针、地址或任何东西,所以我不知道为什么Game.image会受到影响。删除tempConvert.Dispose()可以解决问题,但会造成大量内存泄漏


那么,如果tempConvert的内容已经被传递,为什么tempConvert.Dispose()会影响Game.image呢?

位图
是一种参考类型。当您将其传递给
新游戏
时,您正在传递对
位图
的同一实例的引用。根据所需的生命周期和使用
位图的其他位置,制作另一份
位图的副本或让
游戏类处理它。

位图
是一种参考类型。当您将其传递给
新游戏
时,您正在传递对
位图
的同一实例的引用。根据所需的生命周期和使用
位图的其他位置,制作另一份
位图
或让
游戏
类处理它。

将位图对象的引用传递给游戏类,而不是位图的内容。创建1个位图对象,而不是更多;位图对象由初始代码和游戏对象使用


因此,在初始代码中处理它将影响游戏对象。

您将位图对象的引用传递给游戏类,而不是位图的内容。创建1个位图对象,而不是更多;位图对象由初始代码和游戏对象使用


因此,在初始代码中处理它会影响游戏对象。

听起来你可能需要阅读,你不必处理位图我显示的代码循环了几千次,因此如果我不处理该位图,随后的内存泄漏会使程序崩溃。@user12864说位图是通过引用传递的。它没有镀铜。它不需要额外的内存泄漏。所以别担心。如果你真的不再需要它,你可以处理它。听起来你可能需要阅读,你不必处理位图。我显示的代码循环了几千次,因此如果我不处理该位图,随后的内存泄漏会使程序崩溃。正如@user12864所说的位图是通过引用传递的。它没有镀铜。它不需要额外的内存泄漏。所以别担心。如果你真的不再需要它,你可以处理它。它只是传递一个引用,而不是值。这就解释了。谢谢。那么,它只是传递一个引用,而不是值。这就解释了。谢谢。也谢谢你的帮助。也谢谢你的帮助。