Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 117 118 119 120 121 122 123 124 125 ... 642

   SocialSecurityNumber = ssn;

}

Если только вы не готовы переделать данное свойство в поддерживающее чтение и запись (что вскоре будет сделано), тогда единственным вариантом со свойствами, допускающими только чтение, будет применение лежащей в основе переменной-члена empSSN внутри логики конструктора:

public Employee(string name, int age, int id, float pay, string ssn)

{

   ...

   // Проверить надлежащим образом входной параметр ssn

   // и затем установить значение.

   empSSN = ssn;

}

Свойства, допускающие только запись

 Если вы хотите сконфигурировать свойство как допускающее только запись, тогда опустите блок get, например:

public int Id

{

  set { _empId = value; }

}

Смешивание закрытых и открытых методов get/set в свойствах

При определении свойств уровень доступа для методов get и set может быть разным. Возвращаясь к номеру карточки социального страхования, если цель заключается в том, чтобы предотвратить модификацию номера извне класса, тогда объявите метод get как открытый, но метод set — как закрытый:

public string SocialSecurityNumber

{

  get => _empSSN;

  private set => _empSSN = value;

}

Обратите внимание, что это превращает свойство, допускающее только чтение, в допускающее чтение и запись. Отличие в том, что запись скрыта от чего-либо за рамками определяющего класса.

Еще раз о ключевом слове static: определение статических свойств

Ранее в главе рассказывалось о роли ключевого слова static. Теперь, когда вы научились использовать синтаксис свойств С#, мы можем формализовать статические свойства. В проекте StaticDataAndMembers класс SavingsAccount имел два открытых статических метода для получения и установки процентной ставки. Однако более стандартный подход предусматривает помещение такого элемента данных в статическое свойство. Ниже приведен пример (обратите внимание на применение ключевого слова static):

// Простой класс депозитного счета.

class SavingsAccount

{

  // Данные уровня экземпляра.

  public double currBalance;

  // Статический элемент данных.

  private static double _currInterestRate = 0.04;

  // Статическое свойство.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

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

<b>private EmployeePayTypeEnum _payType;</b>

<b>public EmployeePayTypeEnum PayType</b>

<b>{</b>

<b>  get =&gt; _payType;</b>

<b>  set =&gt; _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>

}

1 ... 117 118 119 120 121 122 123 124 125 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий