#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. Ах!!! Теперь все имеет смысл!! Я бы никогда не подумал, что это работает таким образом, я знал, что есть способ получше! Большое вам спасибо 🙂