Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Свойства. Ключевое слово this. Примеры использования.




Свойства

Свойства служат для организации доступа к полям класса. Как правило, свойство связано с закрытым полем класса и определяет методы его получения и установки. Синтаксис свойства:

[ атрибуты ] [ спецификаторы ] тип имя_свойства

{

[ get код_доступа ]

[ set код_доступа ]

}

Значения спецификаторов для свойств и методов аналогичны. Чаще всего свойства объявляются как открытые (со спецификатором public), поскольку они входят в интерфейс объекта.

Код доступапредставляет собой блоки операторов, которые выполняются при получении (get) или установке (set) свойства. Может отсутствовать либо часть get, либо set, но не обе одновременно.

Если отсутствует часть set, свойство доступно только для чтения (read-only), если отсутствует часть get, свойство доступно только для записи (write-only).

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

Спецификаторы доступа для отдельной части должны задавать либо такой же, либо более ограниченный доступ, чем спецификатор доступа для свойства в целом. Например, если свойство описано как public, его части могут иметь любой спецификатор доступа, а если свойство имеет доступ protected internal, его части могут объявляться как internal, protected или private. Синтаксис свойства имеет вид:

[ атрибуты ] [ спецификаторы ] тип имя_свойства

{

[ [ атрибуты ] [ спецификаторы ] get код_доступа ]

[ [ атрибуты ] [ спецификаторы ] set код_доступа ] }

Пример описания свойств:

рublic class Button: Control

{

рrivate string caption; // закрытое поле, с которым связано свойство

рublic string Caption { // свойство

get { // способ получения свойства

return caption;

}

set { // способ установки свойства

if (сарtion!= valuе) {

сарtion = valuе;

}

}

}

...

}

Двоеточие между именами Button и Соntrol в заголовке класса Вutton означает, что класс Вutton является производным от класса Соntrol.

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

В программе свойство выглядит как поле класса, например:

Вutton ok = new Вutton();

оk.Сарtion = "ОК"; // вызывается метод установки свойства

string s = оk.Сарtion; // вызывается метод получения свойства

При обращении к свойству автоматически вызываются указанные в нем методы чтения и установки.

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

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

С помощью свойств можно отложить инициализацию поля до того момента, когда оно фактически потребуется, например:

 

class A

{

рrivate static ComplexObject х; // закрытое поле

рublic static ComplexObject X // свойство

{

get

{

if(х == null) {

х = new ComplexObject (); // создание объекта при 1-м обращении

}

return х;

}

}

...

}

 

 

Ключевое слово this.

 

Ключевое слово this ссылается на текущий экземпляр класса, а также используется в качестве модификатора первого параметра метода расширения.

Для квалификации элементов, скрытых одинаковыми именами, например:

public Employee(string name, string alias)

{

// Use this to qualify the fields, name and alias:

this.name = name;

this.alias = alias;

}

Для передачи другим методам объекта в качестве параметра, например:

CalcTax(this);






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных