MATLAB® загружает определение класса:
В первый раз на класс ссылаются, такие как создание экземпляра, доступ к постоянному свойству или вызов статического метода класса.
Каждый раз, когда определение загруженного класса изменяется, и MATLAB возвращается к командной строке.
Когда вы изменяете путь MATLAB и заставляете различное определение класса использоваться. Изменение вступает в силу после того, как MATLAB возвращается к командной строке.
Каждый раз, когда вы получаете доступ к метаданным класса.
MATLAB позволяет только одному определению для класса существовать в любое время. Поэтому MATLAB пытается обновить все существующие объекты класса автоматически, чтобы соответствовать новому определению класса. Вы не должны вызывать clear classes
удалить существующие объекты, когда вы изменяете их класс определения.
Примечание
Используя редактор кроме редактора MATLAB или использования MATLAB Online™ может привести к задержкам с автоматическим обновлением.
MATLAB следует за набором основных правил при обновлении существующих объектов. Автоматическое обновление может привести к:
Существующие объекты обновляются к новому определению класса.
Ошибка, если MATLAB не может преобразовать объекты в новое определение класса или если существует ошибка в самом определении класса.
Вот пример того, что происходит, когда вы создаете экземпляр редактирования реального класса определение класса, чтобы сделать краткий обзор класса.
a = MyClass;
% Edit MyClass to make it Abstract
a
Error using MyClass/display
Cannot update object because the class 'MyClass' is now abstract.
Примечание
MATLAB не обновляет экземпляры метакласса, когда вы изменяете определение класса. Необходимо получить новые данные о метаклассе после обновления определения класса.
MATLAB обновляет существующие объекты, когда определение класса изменяется, включая следующие ситуации:
Изменение значения в указателе — Существующие объекты становится независимыми указателями, относящимися к различным объектам.
Член перечисления добавил — Существующие объекты сохраняют члены перечисления, которые они имели ранее, даже если базовые значения изменились.
Член перечисления удалил — Существующие объекты, которые не используют удаленный член, имеют те же члены перечисления, которые они имели ранее. Существующие объекты, которые используют удаленный член, заменяют удаленный член на член по умолчанию перечисления.
Удаленный блок Enumeration — члены Перечисления вынут из использования.
Измененное определение суперкласса — Изменения применилось ко всем подклассам в иерархии того суперкласса.
Суперкласс, добавленный или удаленный — Изменение суперкласса, применился ко всем существующим объектам.
Изменения в пути MATLAB, которые приводят к удалению файла определения класса от пути, даже временно, могут произвести побочные эффекты. Если функция изменяется от текущей папки, которая содержит определение класса, и та папка не находится на пути, то функция не может вызвать методы класса, который является теперь вне осциллографа. Чтобы избежать потенциальных проблем, добавьте папку определения класса в путь прежде, чем превратиться в другую папку.
Например, предположите класс входа obj
задан в текущей папке, которая не находится на пути. Прежде, чем изменить текущую папку в другую папку, добавьте текущую папку в путь с помощью addpath
функция.
function runFromTempFolder(obj) % Add current folder to path addpath(pwd) definingFolder = cd('myTempFolder'); obj.myMethod; cd(definingFolder) end
Эти действия не обновляют существующие объекты:
Вызов class
функция на устаревшем объекте
Присвоение устаревшего объекта к переменной
Вызов метода, который не получает доступ к данным о классе
Изменение валидации свойства в определении класса (Проверка значений свойств)
Объекты не обновляются, пока не ссылается способом, который отсоединяет изменение, такое как вызов отображения объекта или присвоение свойству.
Обновления не происходят инкрементно. Обновления соответствуют последней версии класса.
Удаление файла определения класса не делает экземпляры того класса недопустимыми. Однако вы не можете вызвать методы на существующих объектах того класса.
Некоторый класс обновляет результат в недопустимом определении класса. В этих случаях не обновляются объекты, пока ошибка не разрешена:
Добавление суперкласса может привести к свойству или методу, задаваемому дважды.
Изменение суперкласса, чтобы быть Sealed
когда объекты одного из его подклассов существуют результаты в недопустимом определении подкласса.
Некоторый класс обновляет ситуации с причиной, в которых MATLAB не может обновить существующие объекты соответствовать определению модифицированного класса. Эти случаи приводят к ошибкам, пока вы не удаляете объекты:
Добавление перечисления блокируется к классу неперечисления
Переопределение класса, чтобы быть абстрактным
Удаление класса от неоднородной иерархии, которая заканчивается, там не будучи никаким объектом по умолчанию заменить существующие объекты в разнородном массиве
Обновляя класс, чтобы ограничить поведение формирования массивов, такое как перегрузка индексации массива и конкатенации.
Наследование a subsref
, subsasgn
, cat
, vertcat
, или horzcat
метод
Переопределение класса Handle, чтобы быть классом значения.
После обновления существующие объекты могут быть несовместимыми с новым определением класса. Например, недавно добавленное свойство может потребовать, чтобы выполнение конструктора было допустимо.
Удаление или переименование свойств могут потерять данные, сохраненные в свойстве. Например, если свойство содержит единственную ссылку на другой объект, и вы удаляете то свойство из класса, MATLAB удаляет объект, потому что больше нет никаких ссылок на него.
Удаление класса от неоднородной иерархии классов может привести к недопустимым элементам разнородного массива. В этом случае объект по умолчанию для неоднородной иерархии заменяет эти элементы массива.
Начиная с R2021a.
MATLAB отключает отладчик во время обновлений класса. Перед R2021a точка останова могла потенциально прервать процесс обновления класса и допускать введение ошибок, когда обновление возобновляется.
Например, этот класс задает функцию валидации свойства:
classdef ClassWithBreakpoint properties (Constant) Prop1 (1,1) {myPropertyValidator} end end function myPropertyValidator(~) end % Add breakpoint here
Prop1
включать начальное значение:Prop1 (1,1) {myPropertyValidator} = 32
Изменение атрибутов класса может изменить существующее поведение объекта или сделать объекты недопустимыми. MATLAB возвращает ошибку, когда вы получаете доступ к недопустимым объектам.
Изменение | Эффект |
---|---|
Сделайте | Доступ к существующим объектам возвращает ошибку. |
Измените | Недавно созданные объекты могут наследоваться различным суперклассам, чем существующие объекты. |
Измените | Загрузка классов выполняет текущее значение |
Измените | Недавно созданные объекты могут иметь различную иерархию классов, чем существующие объекты. |
Измените | Внешний вид класса в списке суперклассов и доступа |
Измените | Диспетчеризация метода для существующих объектов может измениться. |
Сделайте | Существующие объекты подкласса возвращают ошибки, когда получено доступ. |
Когда вы изменяете определение свойств класса, MATLAB применяет изменения в существующих объектах класса.
Изменение | Эффект |
---|---|
Addproperty | Добавляет новое свойство к существующим объектам класса. Устанавливает значения свойств на значение по умолчанию (который является |
Свойство Remove | Удаляет свойство из существующих объектов класса. Попытки получить доступ к удаленному сбою свойства. |
Измените значение свойства по умолчанию | Не применяет новое значение по умолчанию к существующим объектам класса. |
Свойство Move между подклассом и суперклассом | Не применяет различное значение по умолчанию, когда определение свойства перемещается между суперклассом и подклассом. |
Измените значение атрибута свойства | Применяет изменения в существующих объектах класса. Некоторые случаи требуют переходных шагов:
|
Когда вы изменяете определение методов класса, MATLAB изменяет затронутый член класса в существующих объектах можно следующим образом.
Изменение | Эффект |
---|---|
Добавьте метод | Можно вызвать новый метод на существующих объектах класса. |
Измените метод | Модификации доступны для существующих объектов. |
Удалите метод | Вы можете на удаленном методе более длинного вызова на существующих объектах. |
Измените значение атрибута метода | Примените изменения в существующих объектах класса. Некоторые случаи требуют переходных шагов:
|
Изменение | Эффект |
---|---|
Addevent | Существующие объекты класса поддерживают новое событие. |
Поменяйте имя события | Новое имя события отображается к существующим объектам класса. MATLAB:
|
Событие Remove | Существующие объекты больше не поддерживают удаленное событие. |
Измените значение атрибута события | Примените изменения в существующих объектах класса. Некоторые случаи требуют переходных шагов:
|