繁体   English   中英

存储值类型变量C#的引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM