Я строю внутреннюю логику для игры на 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;
}
У меня есть еще один объект, умение, которое должно быть в курсе этого бонуса и добавить его в его расчет. Я хотел передать способность в конструктор навыка по ссылке, а затем сохранить эту ссылку, чтобы, если бы Умение изменило расчет, тоже. Очевидная проблема с этим заключается в том, что, по-видимому, сохранение ссылок является табу в C#.
Есть ли какая-нибудь работа, чтобы сделать это или альтернативный способ подойти к этой проблеме, что мой указатель заразил ум не рассматривает? Я бы предпочел не передавать способность к функции, которая каждый раз оценивает навык, так как тот, который ссылается, никогда не изменяется после строительства.
Спасибо, я определенно не понимал, как это сработало. Статьи были весьма полезными. – stygma