Защита полей от вмешательства извне
Поля, запрещенные для доступа извне, объявляются закрытыми. Методов доступа к ним не существует. Никаким способо изменить или получить значение невозмонжо. Как вариант, поле закрывается, открывается метод доступа по чтению.
Пример
Определить класс Точка, описывающий точки, расположенные на луче, выходящем из начала координат. Координаты точки полярны как для разработчика, так и для пользователя.
Объект должен иметь возможность передвигаться по лучу и выдавать информацию о своем теккущем положении.
![]() |
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 градусов
}
}
}
Возможно использование открытых статических полей только для чтения. Такие поля должны иметь инициализатор. Значение поля устанавливается до создания объекта и изменение его (даже с помощью конструктора) невозможно.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.