Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники_АСОИ / Лекции / 01 Классы / Объекты и типы.docx
Скачиваний:
20
Добавлен:
29.02.2016
Размер:
97.14 Кб
Скачать

Свойства

Идея свойства заключается в методе или паре методов, которые ведут себя с точки зре­ния клиентского кода как поле. Хороший пример этого  свойство Height (высота) класса Windows Forms. Предположим, имеется следующий код:

// mainForm относится к типу System.Windows.Forms

mainForm.Height = 400;

При выполнении этого кода высота окна будет установлена в 400, и вы сразу увидите изменение размеров окна на экране. Синтаксически это выглядит как установка значения поля, но на самом деле подобным образом вызывается средство доступа (accessor), которое содержит в себе код, изменяющий размер формы.

Для определения свойства на С# используется следующий синтаксис:

public string SomeProperty

{

get

{

return "Это значение свойства";

}

set

{

// Сделать все необходимое для установки свойства

}

}

Средство доступа get не принимает никаких параметров и должно возвращать значе­ние того типа, который объявлен для свойства. Для средства доступа set не должны ука­зываться явные параметры, но компилятор предполагает, что оно принимает один пара­метр по имени value, относящийся к тому же типу. В качестве примера следующий код содержит свойство по имени Age, которое устанавливает поле age. В данном примере age служит переменной заднего плана для свойства Age.

private int age;

public int Age

{

get f

{

return age;

}

set

{

age = value;

}

}

Обратите внимание на применяемые здесь соглашения об именовании. Здесь использу­ется преимущество зависимости от регистра С#, благодаря которому общедоступное свой­ство именуется в стиле Pascal casing, а для эквивалентного приватного поля, если таковое присутствует, применяется стиль именования Camel casing. Некоторые разработчики пред­почитают использовать имена полей с префиксом  символом подчеркивания: _age. Это обеспечивает чрезвычайно согласованный способ идентификации полей.

Свойства, доступные только для чтения и только для записи

Существует возможность создать свойство, доступное только для чтения, просто исклю­чая set из определения свойства. То есть, чтобы сделать свойство Name из предыдущего примера доступным только для чтения, необходимо поступить следующим образом:

private string name;

public string Name

{

get

{

return name;

}

}

Точно так же можно определить свойство, доступное только для записи, если исклю­чить определение get. Однако это считается плохой практикой программирования, по­скольку может ввести в заблуждение авторов клиентского кода. Вообще говоря, если воз­никает искушение поступить так, то лучше вместо свойства использовать метод.

Модификаторы доступа для свойств

Язык С# допускает применение различных модификаторов доступа для средств set и get свойств. Это дает возможность свойству иметь общедоступный get и приватный или защищенный set, и управлять тем, как и когда свойство может быть установлено. В сле­дующем примере кода обратите внимание, что set имеет модификатор приватного дос­тупа (private), a get  не имеет никакого. В этом случае get получает уровень доступа самого свойства. Одно из средств доступа  set или get  должно иметь уровень доступа свойства. Если get также будет иметь ассоциированный с ним защищенный уровень дос­тупа, то компилятор сгенерирует ошибку, поскольку в этом случае и set, и get получают уровень доступа, отличающийся от уровня доступа самого свойства.

public string Mame

{

get

{

return _name;

}

private set

{

_name = value;

}

}

Соседние файлы в папке 01 Классы