Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 119
- Предыдущая
- 119/642
- Следующая
public string Name{ get { return _empName; } set { // Здесь value на самом деле имеет тип string. if (value.Length > 15) { Console.WriteLine("Error! Name length exceeds 15 characters!"); // Ошибка! Длина имени превышает 15 символов! } else { empName = value; } }}После определения свойств подобного рода вызывающему коду кажется, что он имеет дело с открытым элементом данных однако "за кулисами" при каждом обращении к ним вызывается корректный блок
getsetConsole.WriteLine("***** Fun with Encapsulation *****\n");Employee emp = new Employee("Marvin", 456, 30000);emp.GiveBonus(1000);emp.DisplayStats();<b>// Переустановка и аатем получение свойства Name.</b>emp.Name = "Marv";Console.WriteLine("Employee is named: {0}", emp.Name); // имя сотрудникаConsole.ReadLine();Свойства (как противоположность методам доступа и изменения) также облегчают манипулирование типами, поскольку способны реагировать на внутренние операции С#. В целях иллюстрации будем считать, что тип класса
Employeeclass Employee{ ...<b> // Новое поле и свойство.</b> private int _empAge; public int Age { get { return _empAge; } set { _empAge = value; } }<b> // Обновленные конструкторы.</b> public Employee() {} public Employee(string name, int id, float pay) :this(name, 0, id, pay){} public Employee(string name, int age, int id, float pay) { _empName = name; _empId = id; _empAge = age; _currPay = pay; }<b> // Обновленный метод DisplayStats() теперь учитывает возраст.</b> public void DisplayStats() { Console.WriteLine("Name: {0}", _empName); // имя сотрудника Console.WriteLine("ID: {0}", _empId); // идентификационный номер сотрудника Console.WriteLine("Age: {0}", _empAge); // возраст сотрудника Console.WriteLine("Pay: {0}", _currPay); // текущая выплата }}Теперь предположим, что создан объект
EmployeejoesetgetEmployee joe = new Employee();joe.SetAge(joe.GetAge() + 1);Тем не менее, если
empAgeAgeEmployee joe = new Employee();joe.Age++;Свойства как члены, сжатые до выражений (нововведение в версии 7.0)
Как упоминалось ранее, методы
setgetAgepublic int Age{ get => empAge; set => empAge = value;}Оба варианта кода компилируются в одинаковый набор инструкций IL, поэтому выбор используемого синтаксиса зависит только от ваших предпочтений. В книге будут сочетаться оба стиля, чтобы подчеркнуть, что мы не придерживаемся какого-то специфического стиля написания кода.
Использование свойств внутри определения класса
Свойства, в частности их порция
setEmployeeNameIDРауAge- Предыдущая
- 119/642
- Следующая
