Как контролировать максимальное значение переменных? - PullRequest
0 голосов
/ 23 марта 2019

Как видно из заголовка, я бы хотел установить максимальное значение целых чисел навыка, выносливости и удачи равным значению связанных * максимальных целых чисел. Значения * Max int устанавливаются случайным образом во время запуска программы, а обычные значения меняются во время работы программы. В некоторых случаях значение * Max может увеличиваться или уменьшаться во время игры.

public static int skillMax = 0;
public static int stamMax = 0;
public static int luckMax = 0;
public static int skill = skillMax;
public static int stam = stamMax;
public static int luck = luckMax;

Поскольку мои знания C # все еще находятся в зачаточном состоянии, я не очень старался. Тем не менее, я искал повсюду в Интернете, но не смог найти ничего, кроме полей MinValue и MaxValue и этого фрагмента кода без объяснения:

protected int m_cans;

public int Cans
{
    get { return m_cans; }
    set {
        m_cans = Math.Min(value, 10);
    }
}

Заранее спасибо за любой совет, который вы мне бросаете!

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Пояснение к коду: Cans это свойство.Свойства обеспечивают контролируемый доступ к полям класса или структуры (переменным).Они состоят из двух методов, называемых get для возврата значения и set для присвоения значения.Свойство также может иметь только получатель или только установщик.

Свойство Cans сохраняет свое значение в так называемом вспомогательном поле.Здесь m_cans.Сеттер получает новое значение через ключевое слово value.

Math.Min(value, 10) возвращает минимум двух параметров.Т.е., например, если value равно 8, тогда 8 присваивается m_cans.Если value равно 12, тогда 10 присваивается m_cans.

Вы можете использовать это свойство следующим образом:

var obj = new MyCalss(); // Replace by your real class or struct name.
obj.Cans = 20; // Calls the setter with `value` = 20.
int x = obj.Cans; // Calls the getter and returns 10;

Свойства помогают реализовать принцип Сокрытие информации.


Вы можете легко адаптировать этот пример к своим переменным.Часто переменным уровня класса (полям) предшествует _, чтобы отличать их от локальных переменных, то есть переменных, объявленных в методах.Свойства записываются в PascalCase.

private static int _skillMax; // Fields are automatically initialized to the default
                              // value of their type. For `int` this is `0`.
public static int SkillMax
{
    get { return _skillMax; }
    set {
        _skillMax = value;
        _skill = _skillMax; // Automatically initializes the initial value of Skill.
                            // At program start up you only need to set `SkillMax`.
    }
}

private static int _skill;
public static int Skill
{
    get { return _skill; }
    set { _skill = Math.Min(value, _skillMax); }
}
0 голосов
/ 23 марта 2019

Создание методов для обновления значений

private static void UpdateSkill(int newValue)
{
  skill = newValue;
  skillMax = newValue > skillMax ? newValue : skillMax;
}
...