MATLAB® загружает определение класса:
Первый раз, когда на класс ссылаются, например, создание образца, доступ к свойству constant или вызов статического метода класса.
Всякий раз, когда изменяется определение загруженного класса, MATLAB возвращается в командную строку.
Когда вы изменяете путь MATLAB и вызываете другое определение класса, который будет использоваться. Изменение вступает в эффект после того, как MATLAB возвращается в командную строку.
Каждый раз, когда вы получаете доступ к метаданным класса.
MATLAB позволяет в любой момент существовать только одно определение для класса. Поэтому MATLAB пытается автоматически обновить все существующие объекты класса, чтобы соответствовать новому определению класса. Вам не нужно звонить clear classes
чтобы удалить существующие объекты при изменении их определяющего класса.
Примечание
Использование редактора, отличного от редактора MATLAB, или использование Online™ MATLAB может привести к задержкам автоматического обновления.
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 обновляет существующие объекты при изменении определения класса, включая следующие ситуации:
Изменение значения на указатель - существующие объекты становятся независимыми указателями на различные объекты.
Представитель перечисления добавлен - существующие объекты сохраняют представителей перечисления, которые они имели ранее, даже если базовые значения изменились.
Представитель перечисления удален - существующие объекты, которые не используют удаленный представителя, имеют те же представителей перечисления, что и ранее. Существующие объекты, которые используют удаленный представителя, заменяют удаленный представителя на представителя перечисления по умолчанию.
Блок перечисления удален - представители перечисления выводятся из использования.
Изменение определения суперкласса - Изменения, применяемые ко всем подклассам в иерархии этого суперкласса.
Суперкласс добавлен или удален - Изменение суперкласса, применяемое ко всем существующим объектам.
Изменения в пути MATLAB, которые приводят к удалению файла определения класса из пути, даже временно, могут привести к побочным эффектам. Если функция изменяется с текущей папки, которая содержит определение класса, и эта папка не находится в пути, то функция не может вызвать методы класса, который теперь находится вне возможностей. Чтобы избежать потенциальных проблем, добавьте определяющую класс папку в путь перед изменением в другую папку.
Для примера предположим, что класс входа obj
определяется в текущей папке, которая не находится в пути. Прежде чем менять текущую папку в другую, добавьте текущую папку в путь с помощью addpath
функция.
function runFromTempFolder(obj) % Add current folder to path addpath(pwd) definingFolder = cd('myTempFolder'); obj.myMethod; cd(definingFolder) end
Эти действия не обновляют существующие объекты:
Вызов class
функция для устаревшего объекта
Назначение устаревшего объекта переменной
Вызов метода, который не получает доступ к данным класса
Изменение проверки свойств в определении класса (валидация значений свойств)
Объекты не обновляются до тех пор, пока на них не будут ссылаться таким образом, чтобы это изменение было доступно, как, например, вызов отображения объекта или назначение свойству.
Обновления не происходят постепенно. Обновления соответствуют последней версии класса.
Удаление файла определения класса не делает образцы этого класса недопустимыми. Однако вы не можете вызвать методы для существующих объектов этого класса.
Некоторые обновления классов приводят к недопустимому определению класса. В этих случаях объекты не обновляются до разрешения ошибки:
Добавление суперкласса может привести к тому, что свойство или метод будут заданы дважды.
Изменение суперкласса, который будет Sealed
если объекты одного из его подклассов существуют, это приводит к недействительному определению подкласса.
Некоторые обновления классов вызывают ситуации, в которых MATLAB не может обновить существующие объекты, чтобы соответствовать определению модифицированного класса. Эти случаи приводят к ошибкам, пока вы не удалите объекты:
Добавление блока перечисления к классу, не являющемуся перечислением
Переопределение класса, который будет абстрактным
Удаление класса из гетерогенной иерархии, что приводит к отсутствию объекта по умолчанию для замены существующих объектов в разнородном массиве
Обновление класса для ограничения поведения формирования массива, такого как перегрузка индексации массива и конкатенация.
Наследование 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 применяет изменения к существующим объектам класса.
Изменение | Эффект |
---|---|
Добавить свойство | Добавляет новое свойство к существующим объектам класса. Устанавливает значения свойств на значение по умолчанию (которое является |
Удалить свойство | Удаляет свойство из существующих объектов класса. Не удалось получить доступ к удаленному свойству. |
Измените значение свойства по умолчанию | Не применяет новое значение по умолчанию к существующим объектам класса. |
Переместите свойство между подклассом и суперклассом | Не применяет другое значение по умолчанию, когда определение свойства перемещается между суперклассом и подклассом. |
Изменение значения атрибута свойства | Применение изменений к существующим объектам класса. Некоторые случаи требуют переходных шагов:
|
При изменении определения методов классов MATLAB изменяет затронутого члена класса в существующих объектах следующим образом.
Изменение | Эффект |
---|---|
Метод добавления | Можно вызвать новый метод для существующих объектов класса. |
Метод изменения | Изменения доступны существующим объектам. |
Метод удаления | Можно при более длительном вызове удалить метод для существующих объектов. |
Измените значение атрибута метода | Применить изменения к существующим объектам класса. Некоторые случаи требуют переходных шагов:
|
Изменение | Эффект |
---|---|
Добавить событие | Существующие объекты класса поддерживают новое событие. |
Изменение имени события | Новое имя события отображается существующим объектам класса. MATLAB:
|
Удалить событие | Существующие объекты больше не поддерживают удаленное событие. |
Изменение значения атрибута события | Применить изменения к существующим объектам класса. Некоторые случаи требуют переходных шагов:
|