Свойства

Один из принципов объектно-ориентированного программирования является инкапсуляция. Формально инкапсуляция это объединение полей и методов класса с целью защиты данных от непосредственного доступа из программы. Поля объекта используются через его интерфейс – совокупность правил доступа или свойства. Скрытие полей объекта – их инкапсуляция (от слова «капсула») осуществляется через свойства.

Свойства представляют собой специальные методы, которые на самом деле состоят из двух методов – get() и set() инекоторого поля объекта. Метод get() возвращает текущее значение соответствующего поля объекта, а метод set() помещает в поле объекта новое значение. Эти методы вызываются автоматически всякий раз, когда программа хочет получить значение «свойства» или изменить его. С точки зрения синтаксиса свойства ничем не отличаются от полей: они могут стоять в левой части оператора присваивания либо являться членом выражения в его правой части. Например, закрытому полю int a можно записать следующее свойство целого типа Aa.

public class treyg

{

private int a, b, c, p;

public int Aa

{

get { return a;}

set { a = value;}

}

public string ss;

...

В программе, после создания объекта t полю a можно присвоить новое значение через свойство Aa следующим образом:

int A, B, C;

treyg t = new treyg();

A = Convert.ToInt32(textBox1.Text);

B = Convert.ToInt32(textBox2.Text);

C = Convert.ToInt32(textBox3.Text);

t.Aa = A;,

или переменной программы А присвоить значение поля а объекта t следующим образом:

A = t.Aa;,

где t.Aa – это свойство класса treyg.

В приведенном примере свойством t.Аа мы фактически закрытое поле а класса treyg превратили в открытое поле – это можно сделать проще объявив в классе вместо спецификатора private спецификатор public.

Естественно свойства предназначены для реализации более сложной логики доступа к закрытому полю класса. В нашем примере в свойство установки нового значения полю класса мы можем включить проверку значения на условие > 0 и на реализацию только одной попытки записи, например:

set { if (a == 0 && value > 0) a = value;}

Любой из методов доступа свойства (но не оба сразу) может отсутствовать. В этом случае мы получаем свойства, предназначенные только для чтения или только для записи.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: