Когда вы создаете или добавляете новое Свойство или Метод для некоторого пользовательского или стандартного Класса, например в Дизайнере Классов, вы можете обеспечить различные уровни доступности изащиты к данным свойствам или методам: Public, Protected, Hidden.Когда вы создаете класс при помощи команды (в программном модуле) DEFINE CLASS, вы можете использовать ключевые секции (или опции), такие как PROTECTED или HIDDEN.

По-умолчанию, Свойства и Методы в классах создаются с атрибутом Public, что обеспечивает возможность изменять и переопределять данные Свойства и Методы в порождаемых Классах или создаваемых Объектах, использовать прямые вызовы программного кода данных методов. Тем не менее, для некоторых разрабатываемых классов имеет смысл и необходимость ограничить доступ к некоторым Свойствам, и отключить внешний вызов Методов класса.  Вы можете определить характеристику рассматриваемого Свойства или Метода как Protected, что ограничит доступ к данным элементам помимо класса или подклассов (то есть, они будут доступны только внутри класса). Вы можете также  использовать характеристику Hidden для данных членов класса (свойств или методов), в этом случае эти элементы будут недоступны другим членам класса (скрыты для "родственников").

Например, предположим  вы создаете некоторый Класс, в котором содержится информация "для служебного пользования", и вы не хотите, чтобы пользователи не могли изменять некоторое поле, содержащее информацию о служащем. Вы можете создать требуемое Свойство с реквизитом Protected, и вместе с этим , создать пользовательский метод, возвращающий значение защищенной информации, которую пользователь моржет просматривать, и только. В следующем далее примере проограммного кода: создается пользовательский класс Employee, при помощи команды  DEFINE CLASS, свойство HireDate определяется с атрибутом Protected, смотрите опцию PROTECTED, но имеется мотод с именем GetHireDate, который возвращает требуемое значение:

  CopyCode imageКопировать Код
DEFINE CLASS Employee AS CUSTOM
PROTECTED HireDate
First_Name = ""
Last_Name = ""
Address = ""
HireDate = { - - }

PROCEDURE GetHireDate
RETURN This.HireDate
ENDPROC
ENDDEFINE

Дополнительную информацию смотрите в разделе: DEFINE CLASS, команда.

Стандартный пример Visual FoxPro, Использование Секундомера, пример, также иллюстрирует использование защищенных свойств и методов пользовательского Класса.

См. также