private static double _currInterestRate = 0.04;
// Статическое свойство.
public static double InterestRate
{
get { return _currInterestRate; }
set { _currInterestRate = value; }
}
...
}
Если вы хотите использовать свойство InterestRate
// Вывести текущую процентную ставку через свойство.
Console.WriteLine("Interest Rate is: {0}", SavingsAccount.InterestRate);
Сопоставление с образцом и шаблоны свойств (нововведение в версии 8.0)
Шаблон свойств позволяет сопоставлять со свойствами объекта. В качестве примера добавьте к проекту новый файл (EmployeePayTypeEnum.cs
namespace EmployeeApp
{
public enum EmployeePayTypeEnum
{
Hourly, // почасовая оплата
Salaried, // оклад
Commission // комиссионное вознаграждение
}
}
Обновите класс Employee
private EmployeePayTypeEnum _payType;
public EmployeePayTypeEnum PayType
{
get => _payType;
set => _payType = value;
}
public Employee(string name, int id, float pay, string empSsn)
: this(name,0,id,pay, empSsn, EmployeePayTypeEnum.Salaried
{
}
public Employee(string name, int age, int id,
float pay, string empSsn, EmployeePayTypeEnum payType
{
Name = name;
Id = id;
Age = age;
Pay = pay;
SocialSecurityNumber = empSsn;
PayType = payType;
}
Теперь, когда все элементы на месте, метод GiveBonus()
GiveBonus()
:public void GiveBonus(float amount)
{
Pay = this switch
{
{PayType: EmployeePayTypeEnum.Commission }
=> Pay += .10F * amount,
{PayType: EmployeePayTypeEnum.Hourly }
=> Pay += 40F * amount/2080F,
{PayType: EmployeePayTypeEnum.Salaried }
=> Pay += amount,
_ => Pay+=0
};
}
Как и с другими операторами switch
case
или же оператор switch
обязан генерировать исключение, если ни один из операторов case
не был удовлетворен.Чтобы протестировать внесенные обновления, добавьте к операторам верхнего уровня следующий код:
Employee emp = new Employee("Marvin",45,123,1000,"111-11-1111",
EmployeePayTypeEnum.
Salaried);
Console.WriteLine(emp.Pay);
emp.GiveBonus(100);
Console.WriteLine(emp.Pay);
Понятие автоматических свойств
При создании свойств для инкапсуляции данных часто обнаруживается, что области set
// Тип Car, использующий стандартный синтаксис свойств.
class Car
{
private string carName = "";
public string PetName
{
get { return carName; }
set { carName = value; }
}
}
В подобных случаях многократное определение закрытых поддерживающих полей и простых свойств может стать слишком громоздким. Например, при построении класса, которому нужны девять закрытых элементов данных, в итоге получаются девять связанных с ними свойств, которые представляют собой не более чем тонкие оболочки для служб инкапсуляции.