私は C# でゲームの内部ロジックを構築していますが、C++ から来ているため、これは翻訳で失われる可能性があります。
私はオブジェクト、それが提供するボーナスを計算し、それを整数値として返す能力を持っています。計算は動的であることを意図しており、さまざまな変数に応じて変化する可能性があります。
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;
}
次に、そのボーナスを認識して計算に追加するスキルという別のオブジェクトを用意します。Skill のコンストラクターに参照によって Ability を渡し、その参照を格納して、Ability が変更された場合に計算も同様に行われるようにしたいと考えました。これに関する明らかな問題は、明らかに参照を格納することが C# ではタブーであることです。
これを行うための回避策、またはこの問題に対処するための別の方法がありますか? Skill を評価する関数に毎回アビリティを渡す必要はありません。参照される関数は構築後に変更されることはないためです。