Установите закрытое поле в конструкторе, используя проверку набора из свойства

#c# #constructor #properties

#c# #constructor #свойства

Вопрос:

Итак .. Как мне проверить закрытую переменную экземпляра (field) со свойством внутри конструктора?

У меня есть этот код, который работает, но у меня сильное чувство, что это не так, как это должно быть сделано:

 class Account
    {
        private decimal acctBalance = 0;

        public decimal AcctBalance
        {
            get
            {
                return acctBalance;
            }
            set
            {
                if (acctBalance >= 0)
                    acctBalance = value;
                else
                {
                    Console.WriteLine("Invalid balance, balance set to 0");
                    acctBalance = 0;
                }
            }
        }

        public Account(decimal balance)
        {
            acctBalance = balance;
            AcctBalance = acctBalance;
        }
    }
  

Я просто хочу убедиться, что это правильный способ сделать это

Спасибо!

Ответ №1:

Ваш подход в основном правильный, хотя есть пара проблем. Я исправил их и прокомментировал код комментариями, где я это сделал.

 class Account
{
    private decimal acctBalance = 0;

    public decimal AcctBalance
    {
        get
        {
            return acctBalance;
        }
        set
        {
            //modified to check value instead of acctBalance
            if (value >= 0)
                acctBalance = value;
            else
            {
                Console.WriteLine("Invalid balance, balance set to 0");
                acctBalance = 0;
            }
        }
    }

    public Account(decimal balance)
    {
        //redundant! Changing AcctBalance changes acctBalance
        //acctBalance = balance;
        AcctBalance = balance; 
    }
} 
  

Комментарии:

1. Это домашнее задание, в котором меня конкретно просят использовать общедоступное свойство для установки закрытого поля, я просто хочу убедиться, что это правильный способ сделать это или, по крайней мере, общепринятый способ

2. Вот точные инструкции: «Учетная запись базового класса должна включать одну закрытую переменную экземпляра типа decimal для представления баланса учетной записи. Класс должен предоставить конструктор, который получает начальный баланс и использует его для инициализации переменной экземпляра с общедоступным свойством. Свойство должно проверить начальный баланс, чтобы убедиться, что он больше или равен 0.0. В противном случае баланс должен быть установлен в 0.0, а средство доступа set должно отображать сообщение об ошибке, указывающее, что начальный баланс был недействительным «.

3. 1 для исправления параметра установки ( value против имени частного поля — как изначально написано, это не сделало бы того, чего ожидал OP) и избыточности в конструкторе 🙂

4. Ах!!! Теперь все имеет смысл!! Я бы никогда не подумал, что это работает таким образом, я знал, что есть способ получше! Большое вам спасибо 🙂