Методы доступа к свойствам

Свойства обеспечивают доступ к данным класса

В MATLAB®, свойства могут иметь открытый доступ. Поэтому свойства могут обеспечить доступ к данным, которые проект класса отсоединяет пользователям.

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

Дополнительные сведения о синтаксисе метода доступа см. в Свойстве Методы Набора свойств и методы get.

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

Факторы производительности с методами доступа

Методы доступа к свойствам действительно добавляют издержки вызова функции, получая доступ к значениям свойств. Если критический по отношению к эффективности доступ к свойствам происходит в методах класса, задайте частные свойства, чтобы сохранить значения. Используйте эти значения в методах без любой проверки ошибок. Для менее частого доступа снаружи класса задайте общедоступный Dependent свойства, которые используют методы доступа для проверки ошибок.

Для получения информации о методах доступа, используемых с Dependent свойства, смотрите Набор и методы get для Dependent Properties.

Набор свойств и методы get

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

  • Выполните код прежде, чем присвоить значения свойств, чтобы выполнить действия, такие как:

    • Введите ограничения диапазона значений (Проверка значений свойств)

    • Проверяйте на соответствующие типы и размерности

    • Обеспечьте обработку ошибок

  • Выполните код прежде, чем возвратить текущие значения свойств выполнить действия, такие как:

Чтобы управлять, какой код может получить доступ к свойствам, см. Атрибуты свойств.

Когда MATLAB вызывает методы доступа

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

Примечание

Вы не можете вызвать методы доступа свойства непосредственно. MATLAB вызывает эти методы когда вы доступ к значениям свойств.

Получите указатель на функцию для набора и получите методы доступа от свойства meta.property объект. meta.property SetMethod и GetMethod свойства содержат указатели на функцию, которые обращаются к этим методам.

Ограничения на методы доступа

Методы доступа свойства Define только:

  • Для конкретных свойств (то есть, свойства, которые не абстрактны),

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

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

После того, как заданный, только набор и добирается, методы могут установить и запросить фактические значения свойств. Смотрите, Когда Метод установки Называется для получения информации о случаях, где MATLAB не вызывает методы набора свойств.

Примечание

Набор свойств и добирается, методы доступа не эквивалентны вызываемому пользователем set и get методы раньше устанавливали и запрашивали значения свойств от экземпляра класса. Смотрите, что Реализация Устанавливает/Получает Интерфейс для Свойств для получения информации о вызываемом пользователем set и get методы.

Методы доступа не могут Вызов функций к Access Properties

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

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

Определение методов доступа

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

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

Методы доступа к свойствам не появляются в списке методов класса, возвращенных methods команда и не включена в meta.class объект Methods свойство.

Метод доступа Указатели на функции

Свойство meta.property объект содержит указатели на функцию к набору свойств, и получите методы. SetMethod содержит указатель на функцию к методу установки. GetMethod содержит указатель на функцию к получить методу.

Получите эти указатели из meta.property объект:

mc = ?ClassName;
mp = findobj(mc.PropertyList,'Name','PropertyName');
fh = mp.GetMethod;

Например, если класс MyClass задает получить метод для его Text свойство, можно получить указатель на функцию к этой функции от meta.class объект:

mc = ?MyClass;
mp = findobj(mc.PropertyList,'Name','Text');
fh = mp.GetMethod;

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

Для получения информации об определении указателей на функцию см. Создание указателя на функцию

Выполнение set и get метод и События свойства

Программное обеспечение MATLAB генерирует события до и после набора, и получите операции. Можно использовать эти события, чтобы сообщить прослушивателям, что на значения свойств сослались или присвоили. Синхронизация генерации события следующие:

  • PreGet — Инициированный прежде, чем вызвать свойство получают метод

  • PostGet — Инициированный после свойства добираются, метод возвратил свое значение

Если класс вычисляет значение свойства (Dependent = true), затем поведения его событий набора похожи на получить события:

  • PreSet — Инициированный прежде, чем вызвать метод набора свойств

  • PostSet — Инициированный после вызова метода набора свойств

Если свойство не вычисляется (Dependent = false, значение по умолчанию), затем оператор присваивания с методом установки генерирует события:

  • PreSet — Инициированный прежде, чем присвоить новое значение свойства в методе установки

  • PostSet — Инициированный после присвоения нового значения свойства в методе установки

Для получения информации об использовании событий свойства смотрите, Создают Прослушиватели Свойства.

Методы доступа и свойства, содержащие массивы

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

Для индексируемой ссылки:

val = obj.PropName(n);

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

Для индексируемого присвоения:

obj.PropName(n) = val;

MATLAB:

  • Вызывает получить метод, чтобы получить значение свойства

  • Выполняет индексируемое присвоение на возвращенном свойстве

  • Передает новое значение свойства методу установки

Методы доступа и массивы объектов

Когда ссылка или присвоение происходят на объектном массиве, MATLAB вызывает набор, и получите методы в цикле. В этом цикле MATLAB всегда передает скалярные объекты установить и получить методы.

Изменение значений свойств с методами доступа

Методы доступа к свойствам полезны в случаях, где вы хотите выполнить некоторые дополнительные шаги прежде, чем присвоить или возвратить значение свойства. Например, Testpoint класс использует метод набора свойств, чтобы проверять область значений значения. Это затем применяет масштабирование, если это в конкретной области значений и установило его на NaN если это не.

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

classdef Testpoint
   properties
      expectedResult = []
   end
   properties(Constant)
      scalingFactor = 0.001
   end
   methods
      function obj = set.expectedResult(obj,erIn)
         if erIn >= 0 && erIn <= 100
            erIn = erIn.*obj.scalingFactor;
            obj.expectedResult = erIn;
         else
            obj.expectedResult = NaN;
         end
      end
      function er = get.expectedResult(obj)
         er = obj.expectedResult/obj.scalingFactor;
      end
   end
end

Похожие темы