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

Вызов конструктора, когда загружаемые объекты

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.

Похожие темы

Была ли эта тема полезной?