将对象声明为" new"会产生什么后果?多次?

时间:2015-10-10 20:47:19

标签: c# android object xna

我正在使用C#和XNA制作游戏,该游戏将针对Android和Windows Phone 7,7.1,8等移动设备。它将使用一个名为Minigame的对象来确定玩家将要玩的当前游戏(一个小游戏设置在农场,另一个设置在城市等)。创建迷你游戏的代码就像这样设置。

public class Game1 : Microsoft.Xna.Framework.Game
{
    //This is a global variable
    Minigame minigame;

    ...

    //This method loads the minigame when the player chooses one from the main menu
    //It is loaded using an instance of a class that inherits from the Minigame class
    void LoadMinigame(int number)
    {
        if (number == 0)
        {
            minigame = new MinigameOne();
        }
        else if (number == 1)
        {
            minigame = new MinigameTwo();
        }
        else
        {
            minigame = new MinigameThree();
        } 
    }
}

小游戏总是使用" new"一个对象的实例,但是当小游戏完成并且玩家选择另一个时,永远不会有任何形式的删除。 C#是否希望我做以下事情,或者我继续使用" new"一遍又一遍,没有找到删除变量的方法(即下面的代码相同,减去删除命令)?

minigame = new MinigameOne();

//Do something with the minigame

delete minigame; //I don't think this command exists in C#, but is there an equivalent?
minigame = new MinigameTwo();

//Do something again

delete minigame;
minigame = new MinigameThree();

3 个答案:

答案 0 :(得分:5)

删除对对象的所有引用后,它就有资格进行垃圾回收。通过覆盖your_data$X3 = NA # initialize the column for (i in 1:nrow(your_data)) { your_data$X3[i] = min(your_data$X1[i], your_data$X2[i]) } 中保存的引用,您将删除对前一个迷你游戏对象的引用。只要没有其他引用它,一段时间后垃圾收集器就会吞噬它。

我建议您阅读"The fundamentals of garbage collection",以便更好地了解对象如何达到其生命周期的终点。

答案 1 :(得分:1)

我不是特别了解XNA,但我认为它必须分配一些需要发布的资源,否则你可能会在一段时间后用完它们(文件句柄,画笔,你有什么)。< / p>

虽然.NET垃圾收集器(GC)通常在管理内存方面做得很好,但它不会释放上述非托管资源。

您应该确保遵循正确的XNA最佳实践(无论它们是什么)。

我认为using块应该足以处理您的Game对象,因为Microsoft.Xna.Framework.Game实现了IDisposable。

干杯

答案 2 :(得分:0)

不,.Net会为你服务。

创建新对象并将其分配给minigame变量后,它就有资格进入垃圾收集器(因为没有人再引用它)。经过一段时间后,GC会查看throgh堆并删除对象,而不需要参考。