Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

Конструктор Employee

После объявления полей в приведенном выше коде располагается "метод", имя которого —

Employee
, совпадает с именем класса, то есть перед нами находится конструктор. Однако этот конструктор получает параметры и делает то же самое, что и метод
Create
в версии VB — он использует параметры для инициализации полей-членов:

public Employee(string name, decimal salary) {

 this.name = name;

 this.salary = salary;

}

Существует потенциальная синтаксическая проблема, так как явные имена параметров совпадают с именами полей —

name
и
salary
. Но она разрешается с помощью использования ссылки
this
, помечающей поля. Можно было бы вместо этого дать параметрам другие имена, но способ, которым это было сделано, является достаточно ясным и означает, что параметры сохраняют очевидные простые имена, которые соответствуют их значениям. Это обычный способ действий для C# в таких ситуациях.

Теперь можно объяснить точное значение квалификатора

readonly
перед именем поля:

private readonly string name;

Если поле помечено как

readonly
, то единственным местом, где ему может быть присвоено значение, является конструктор класса. Компилятор будет инициировать ошибку, если встретит код, который попытается изменить значение переменной
readonly
, в любом месте, кроме конструктора. Это предоставляет надежную гарантию, что переменная не будет изменена, если она была задана. Невозможно сделать что-либо подобное в VB, так как VB не имеет конструкторов, которые получают параметры, поэтому переменные уровня класса в VB должны быть инициализированы с помощью методов или свойств, вызываемых после создания экземпляра объекта.

Между прочим этот конструктор не просто позволяет задать параметры для инициализации объекта

Employee
— он заставляет это сделать. Если написать код следующего вида:

Employee Britney = new Employee; // неправильно

то он на самом деле не откомпилируется. Компилятор будет инициировать ошибку, так как в C# должен всегда вызываться конструктор, когда создается новый объект. Но никаких параметров задано не было, а единственный доступный конструктор требует двух параметров. Поэтому просто невозможно создать объект

Employee
без каких-либо параметров. Это страхует от ошибок, вызываемых неинициализированными объектами
Employee
.

Можно задать в классе более одного конструктора, чтобы выбрать, какое множество желательно использовать при создании нового объекта этого класса. Мы увидим, как это делается позже в данном приложении. Однако для этого конкретного класса единственного конструктора вполне достаточно.

Свойства класса Employee

Теперь мы переходим к свойствам

Name
и
Salary
. Синтаксис C# для объявления свойства существенно отличается от соответствующего синтаксиса VB, но базовые принципы одинаковы. Необходимо определить два метода доступа (accessors) соответственно для "получения" и "задания" значений свойства. В VB они синтаксически интерпретируются как методы, но в C# свойство объявляется в целом, а затем определяются методы доступа внутри определения свойства.

public decimal Salary {

 get {

return salary;

 }

 set {

salary = value;

 }

}

В VB компилятор знает, что определяется свойство, так как используется ключевое слово

Property
. В C# эта информация передается тем, что за именем свойства немедленно следует открывающая фигурная скобка. Если определяется метод, то это будет открывающая скобка, указывающая начало списка параметров, в то время как для поля это будет точка с запятой, отмечающая конец определения.

Еще один момент, на который необходимо обратить внимание, состоит в том, что определения методов доступа

get
и
set
не содержат никаких списков параметров, это не важно. Мы знаем, что
Salary
является десятичным значением, и метод доступа
get
вернет десятичное значение, не используя параметры, в то время как метод доступа
set
будет получать один десятичный параметр и возвращать
void
. Для процедуры доступа
set
этот параметр не объявляется явно, но компилятор всегда интерпретирует слово value как ссылающееся на него.

Здесь снова синтаксис определения свойств показывает, что в случае C# он является более компактным и может облегчить ввод кода.

Так же как в VB, если необходимо сделать свойство предназначенным только для чтения, то просто опускается метод доступа

set
, как было сделано для свойства
Name
:

public string Name {

 get {

return name;

 }

}

  • Читать дальше
  • 1
  • ...
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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