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