Поля, запрещенные для доступа извне, объявляются закрытыми. Методов доступа к ним не существует. Никаким способо изменить или получить значение невозмонжо. Как вариант, поле закрывается, открывается метод доступа по чтению.
Пример
Определить класс Точка, описывающий точки, расположенные на луче, выходящем из начала координат. Координаты точки полярны как для разработчика, так и для пользователя.
class Точка
{
private double fi, d;
public Точка(double fi)
{ this.fi = fi; }
public void Установить(double d)
{ this.d=d;}
public double ВычислитьFI()
{return fi;}
public double ВыдатьD()
{ return d; }
}
class Program
{
public static void Main()
{
Точка t; double fi;
t = new Точка(Math.PI/2);
t.Установить(5.0);
fi=t.ВычислитьFI();
}
}
}
Альтернативой инкапсуляции с точки зрения защитных полей являются открытые поля доступные для чтения. Поле, открытое для чтения, может быть установлено конструктором. Дальнейшие изменения запрещены.
Пример аналогичен предыдущему, реализован через открытые поля для чтения.
class Точка
{
public readonly fi;
private double d;
public Точка(double fi)
{ this.fi = fi; }
public void Установить(double d)
{ this.d=d;}
public double ВычислитьFI()
{return fi;}
public double ВыдатьD()
{ return d; }
}
class Program
{
public static void Main()
{
Точка t; double fi;
t = new Точка(Math.PI/2);
t.Установить(5.0);
fi=t.fi; //45 градусов
}
}
}
Возможно использование открытых статических полей только для чтения. Такие поля должны иметь инициализатор. Значение поля устанавливается до создания объекта и изменение его (даже с помощью конструктора) невозможно.
Свойства
Определение свойства:
public_Тип возвращаемого значения_Имя свойства
// параметров нет, поэтому скобок после имени нет и быть не может
{ set {код для установки поля}
неявный параметр (value)
get {код для чтения поля}
}
Свойства используются для поддержки инкапсуляции, создания виртуальных полей (т.е. реально полей нет, но у пользователя создается впечатление, что они есть; на самом деле значение вычисляется).
Пример
Определить класс Точка на плоскости в прямоугольных координатах, точка может располагаться только выше оси х или на ней.
class Точка
{
private double x, y;
public double xp
{
set { x = value; }
get { return x; }
}
public double yp
{
set
{
if (value >= 0)
y = value;
else y = 0;
}
get { return y; }
}
public double Dp
{
get { return Math.Sqrt(x * x + y * y); }
}
}
class Program
{
public static void Main()
{
Точка t;
t = new Точка();
t.xp = 3.0;
t.yp = 4.0;
t.Dp;// => 5.0
}
}
АГРЕГАЦИЯ
Дата: 2019-02-02, просмотров: 305.