можно обновить на основе типа оплаты сотрудника. Сотрудники с комиссионным вознаграждением получают премию 10%, с почасовой оплатой — 40-часовой эквивалент соответствующей премии, а с окладом — введенную сумму. Вот модифицированный код метода
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; }
}
}
В подобных случаях многократное определение закрытых поддерживающих полей и простых свойств может стать слишком громоздким. Например, при построении класса, которому нужны девять закрытых элементов данных, в итоге получаются девять связанных с ними свойств, которые представляют собой не более чем тонкие оболочки для служб инкапсуляции.
Чтобы упростить процесс обеспечения простой инкапсуляции данных полей, можно использовать синтаксис автоматических свойств. Как следует из названия, это средство перекладывает работу по определению закрытых поддерживающих полей и связанных с ними свойств C# на компилятор за счет применения небольшого нововведения в синтаксисе. В целях иллюстрации создайте новый проект консольного приложения по имени
AutoProps
и добавьте к нему файл
Car.cs
с переделанным классом
Car
, в котором данный синтаксис используется для быстрого создания трех свойств: