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

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

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

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

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

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

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

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

The 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

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

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

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

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

Похожие темы