Язык программирования C#9 и платформа .NET5
SocialSecurityNumber = ssn;}Если только вы не готовы переделать данное свойство в поддерживающее чтение и запись (что вскоре будет сделано), тогда единственным вариантом со свойствами, допускающими только чтение, будет применение лежащей в основе переменной-члена
внутри логики конструктора:empSSNpublic Employee(string name, int age, int id, float pay, string ssn){...// Проверить надлежащим образом входной параметр ssn// и затем установить значение.empSSN = ssn;}Свойства, допускающие только запись
Если вы хотите сконфигурировать свойство как допускающее только запись, тогда опустите блок
, например:getpublic int Id{set { _empId = value; }}Смешивание закрытых и открытых методов get/set в свойствах
При определении свойств уровень доступа для методов
иgetможет быть разным. Возвращаясь к номеру карточки социального страхования, если цель заключается в том, чтобы предотвратить модификацию номера извне класса, тогда объявите методsetкак открытый, но методget— как закрытый:setpublic string SocialSecurityNumber{get => _empSSN;private set => _empSSN = value;}Обратите внимание, что это превращает свойство, допускающее только чтение, в допускающее чтение и запись. Отличие в том, что запись скрыта от чего-либо за рамками определяющего класса.
Еще раз о ключевом слове static: определение статических свойств
Ранее в главе рассказывалось о роли ключевого слова
. Теперь, когда вы научились использовать синтаксис свойств С#, мы можем формализовать статические свойства. В проектеstaticклассStaticDataAndMembersимел два открытых статических метода для получения и установки процентной ставки. Однако более стандартный подход предусматривает помещение такого элемента данных в статическое свойство. Ниже приведен пример (обратите внимание на применение ключевого словаSavingsAccount):static// Простой класс депозитного счета.class SavingsAccount{// Данные уровня экземпляра.public double currBalance;// Статический элемент данных.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.csnamespace EmployeeApp{public enum EmployeePayTypeEnum{Hourly, // почасовая оплатаSalaried, // окладCommission // комиссионное вознаграждение}}Обновите класс
, добавив свойство для типа оплаты и инициализировав его в конструкторе. Ниже показаны изменения, которые понадобится внести в код:Employee<b>private EmployeePayTypeEnum _payType;</b><b>public EmployeePayTypeEnum PayType</b><b>{</b><b> get => _payType;</b><b> set => _payType = value;</b><b>}</b>public Employee(string name, int id, float pay, string empSsn): this(name,0,id,pay, empSsn, <b>EmployeePayTypeEnum.Salaried</b>){}public Employee(string name, int age, int id,float pay, string empSsn, <b>EmployeePayTypeEnum payType</b>){Name = name;Id = id;Age = age;Pay = pay;SocialSecurityNumber = empSsn;<b> PayType = payType;</b>}