C# 如何删除对象的实例,以便新的、更新的实例可以接管?

C# 如何删除对象的实例,以便新的、更新的实例可以接管?,c#,class,polymorphism,instance,C#,Class,Polymorphism,Instance,在我的游戏中,我声明一个玩家类(战士/盗贼/等等),如下所示: 在游戏的第一帧(目前),我实例化了我的玩家的PlayerClass,如下所示: playerClass = new WarriorClass(player, 100); 这很有效。WarriorClass允许我的玩家使用一些技能。但是,现在我想让我的玩家变成一个流氓: playerClass = new RogueClass(player, 100); 但不管出于什么原因,我现在有两个例子,而不是一个。我按下我的

在我的游戏中,我声明一个玩家类(战士/盗贼/等等),如下所示:

在游戏的第一帧(目前),我实例化了我的玩家的PlayerClass,如下所示:

    playerClass = new WarriorClass(player, 100);
这很有效。WarriorClass允许我的玩家使用一些技能。但是,现在我想让我的玩家变成一个流氓:

    playerClass = new RogueClass(player, 100);
但不管出于什么原因,我现在有两个例子,而不是一个。我按下我的异能按钮,它同时触发战士和盗贼异能

在分配新的盗贼之前,如何擦除或删除WarriorClass引用

如果我退出主菜单并再次登录游戏,会发生什么情况?我的玩家有两个WarriorClass实例。我不知道如何进行


归根结底,我的问题的根源是我不明白为什么playerClass不会像其他变量那样每次都被覆盖。

尝试删除
playerClass中
播放器
对象的所有引用

在playerClass(WarriorClass、RogueClass)中创建一个名为
Destroy()
的方法,并在创建新对象时调用此方法

public void Destroy(){
    this.player = null;
    //remove all other references, stop tasks-threads if exists. 
}

抱歉没有提供足够的信息。我对自己的问题还不够了解,不知道该给予什么。我实现了一个想法,但我没有意识到是这个想法导致了这个错误。我持有一个技能列表,但在游戏开始时没有清除它们。每一场比赛的开始都会附加更多内容:

在播放器中:

    public List<Ability> ActiveAbilities = new List<Ability>();

在WarriorClass和RgoueClass中,您是否保留了玩家对象的引用?这太宽泛了,我们不应该期望知道您的菜单或注销函数的作用。我们也不应该期望知道你的玩家对象是如何处理的。添加更多信息!哦,好的,这是一个使用tModLoader的Terraria的mod。我不知道Blakeconnaly的答案。我认为“为什么playerClass没有被覆盖”的答案很简单。当游戏开始时,我所做的就是上面所说的。@MuhammedYusuf我确实会将对我的玩家的引用传递给我的玩家类,然后是能力类并使用它。
    public List<Ability> ActiveAbilities = new List<Ability>();
        ability1 = new LeapAbility();
        player.GetModPlayer<MyPlayer>().ActiveAbilities.Add(ability1);
        ActiveAbilities.Clear();
        playerClass = new TestClass(player, 100);