假设我正在制作游戏并且有一个基Buff
类。我也可能有一个名为的子类ThornsBuff
订阅Player
该类的Damaged
事件。
Player
可能有一个 s 列表,其中Buff
一个可能是ThornsBuff
。例如:
测试班
Player player = new Player();
player.ActiveBuffs.Add(new ThornsBuff(player));
ThornsBuff 类
public ThornsBuff(Player player)
{
player.DamageTaken += player_DamageTaken;
}
private void player_DamageTaken(MessagePlayerDamaged m)
{
m.Assailant.Stats.Health -= (int)(m.DamageAmount * .25);
}
这都是为了说明一个例子。如果我要从列表中删除 buff,则事件不会分离。即使玩家不再拥有 buff,事件仍会像他一样执行。
现在,我可以有一个Dispel
方法来取消注册该事件,但这会迫使开发人员调用Dispel
除了Buff
从列表中删除之外。如果他们忘记了,增加耦合等怎么办?
Buff
我不明白为什么从列表中删除事件时事件不会自动分离。Buff
唯一存在于列表中,这是它的一个参考。删除后不应该分离事件吗?
我尝试将分离代码添加到终结器中,Buff
但这也没有解决它。即使事件有 0 个引用,该事件仍在运行。我想这是因为垃圾收集器还没有运行?有没有办法让它自动和即时,这样当对象没有引用时,它的所有事件都是未注册的?
谢谢。