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
.