簡體   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