exponenta event banner

Инициализация объектов при загрузке

Вызов конструктора при загрузке объектов

MATLAB ® не вызывает конструктор класса при загрузке объекта из MAT-файла. Однако, если установить ConstructOnLoad атрибут класса для true, load вызывает конструктор без аргументов.

Позволить ConstructOnLoad когда вы не хотите реализовать loadobj метод, но должен выполнять некоторые действия во время построения. Например, включить ConstructOnLoad при регистрации прослушивателей для другого объекта. Убедитесь, что MATLAB может вызывать конструктор класса без аргументов без создания ошибки.

Атрибуты, заданные для суперклассов, не наследуются подклассами. Поэтому MATLAB не использует значение суперкласса ConstructOnLoad при загрузке объектов. Если необходимо, чтобы MATLAB вызывал конструктор класса, установите значение ConstructOnLoad в конкретном подклассе.

Если конструктору требуются входные аргументы, используйте loadobj способ.

Инициализация объектов в loadobj Метод

Использовать loadobj метод, когда конструктору класса требуются входные аргументы для выполнения инициализации объекта.

LabResults класс совместно использует шаги инициализации объекта конструктора с loadobj путем выполнения этих шагов в assignStatus способ.

Объекты LabResults класс:

  • Удерживайте значения для результатов тестов.

  • Назначьте статус для каждого значения на основе набора критериев.

classdef LabResult
   properties
      CurrentValue
   end
   properties (Transient)
      Status
   end
   methods
      function obj = LabResult(cv)
         obj.CurrentValue = cv;
         obj = assignStatus(obj);
      end
      function obj = assignStatus(obj)
         v = obj.CurrentValue;
         if v < 10
            obj.Status = 'Too low';
         elseif v >= 10 && v < 100
            obj.Status = 'In range';
         else
            obj.Status = 'Too high';
         end
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            cv = s.CurrentValue;
            obj = LabResults(cv);
         else
            obj = assignStatus(s);
         end
      end
   end
end

LabResults использует класс loadobj для определения состояния данного тестового значения. Этот подход позволяет:

  • Изменение критериев для определения статуса

  • Убедитесь, что объекты всегда используют текущие критерии

Вам не нужно реализовывать saveobj способ.

Связанные темы