我正在为 C# 中的游戏构建内部逻辑,并且来自 C++,这对我来说可能会在翻译中丢失。
我有一个对象,Ability,它计算它提供的奖金并将其作为整数值返回。计算是动态的,可以根据各种变量而改变。
public class Ability: Buffable
{
public string abbr { get; private set; }
public Ability(string name, string abbr, uint score) : base(name, score)
{
this.abbr = abbr;
}
// Ability Modifier
// returns the ability modifier for the class.
public int Ability_modifier()
{
const double ARBITARY_MINUS_TEN = -10;
const double HALVE = 2;
double value = (double)this.Evaluate();
double result = (value + ARBITARY_MINUS_TEN) / HALVE;
// Round down in case of odd negative modifier
if (result < 0 && ((value % 2) != 0))
{
result--;
}
return (int)result;
}
然后我有另一个对象,技能,它应该知道该奖金并将其添加到它的计算中。我想通过引用将能力传递给技能的构造函数,然后存储该引用,以便如果能力改变了计算也可以。明显的问题是显然存储引用是 C# 中的禁忌。
是否有一种解决方法可以解决这个问题,或者有另一种方法来解决我的指针感染的大脑没有考虑的这个问题?我非常希望不必每次都将能力传递给评估技能的函数,因为引用的函数在构造后永远不会改变。