[英]Store reference of a value type variable C#
我正在尝试为我的游戏创建状态效果,例如那些会随着时间的推移影响玩家统计数据的因素。 但是我在记住传递的变量时遇到麻烦,即应该修改的变量。 假设您具有某种状态影响,将我的方式在10秒钟内降低了10%的生命值,方法是实例化一个新类,该类传递一些参数以及在这种情况下需要修改的变量,但这是玩家的健康状况,但是问题是是一旦构造函数消失,引用将在这两个函数之间断开,从那时起,我只需编辑一些从未使用过的变量。
这是我实例化状态效果的方法
/// <summary>
/// Creates a status effect which ticks at specified period of time without any condition.
/// </summary>
public StatusEffect(float increase, EffectIncreaseType increaseType, float timeOfStatusEffect, float tickTime)
{
this.increase = increase;
this.endTimeOfStatusEffect = Time.time + timeOfStatusEffect;
this.tickTime = tickTime;
increaseCalculator = increaseType == EffectIncreaseType.Percentage ? increaseCalculator = (a) => (int)(increase / 100f * a) : increaseCalculator = (a) => (int)increase;
}
这就是我现在使用的方式
public bool TryTrigger(ref int affectedProperty)
{
if (condition.Invoke(affectedProperty))
{
affectedProperty += increaseCalculator.Invoke(affectedProperty);
}
return condition.Invoke(affectedProperty);
}
这不是我想要的,首先它需要将字段传递给TryTrigger
方法, TryTrigger
不是属性,其次,您不应该一直知道需要什么变量,而应该一直在开始时将其传递,然后尝试通过类本身在后台使用该变量来触发。 那可能吗 ? 有没有更好的方法来制作状态效果(DoT,HoT)? 另外,我想使此功能可用于即时状态更改,例如,将您的健康状况降低30%,持续1分钟,但是我不确定当前的设置是否对您有好处。
无法在.NET中存储对变量的“引用”。 这是故意的。 它消除了C / C ++中常见的错误类别,在该错误类别中,您将对变量的引用存储到变量的整个生存期中,从而导致不良情况发生。
相反,执行所需操作的方法是传递一个Action<T>
,该Action<T>
设置要更改的变量(或属性),然后在要更改它时调用该操作。
那如何解决问题呢? 因为C#确保委托所捕获的变量总是长期存在的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.