Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

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
можно обновить на основе типа оплаты сотрудника. Сотрудники с комиссионным вознаграждением получают премию 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
, в котором данный синтаксис используется для быстрого создания трех свойств:

Поделиться:
Популярные книги

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

О, мой бомж

Джема
1. Несвятая троица
Любовные романы:
современные любовные романы
5.00
рейтинг книги
О, мой бомж

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Вы не прошли собеседование

Олешкевич Надежда
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Вы не прошли собеседование

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки