Автоматические обновления для модифицированных классов

Когда 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 — участники Перечисления вынут из использования.

  • Измененное определение суперкласса — Изменения применилось ко всем подклассам в иерархии того суперкласса.

  • Суперкласс, добавленный или удаленный — Изменение суперкласса, применился ко всем существующим объектам.

Действия, которые не инициировали обновления

Эти действия не обновляют существующие объекты:

  • Вызывание функции class на устаревшем объекте

  • Присвоение устаревшего объекта к переменной

  • Вызов метода, который не получает доступ к данным класса

  • Изменение валидации свойства в определении класса (Проверка значений свойств)

Объекты не обновляют, пока не ссылается способом, который представляет изменение, такое как вызов отображения объекта или присвоение свойству.

Несколько обновлений определений классов

Обновления не происходят инкрементно. Обновления соответствуют последней версии класса.

Объектная законность с удаленным файлом класса

Удаление файла определения класса не делает экземпляры того класса недопустимыми. Однако вы не можете вызвать методы на существующих объектах того класса.

Когда обновления не возможны

Некоторый класс обновляет результат в недопустимом определении класса. В этих случаях объекты не обновляют, пока ошибка не разрешена:

  • Добавление суперкласса может привести к свойству или методу, задаваемому дважды.

  • Изменение суперкласса, чтобы быть Sealed, когда объекты одного из его подклассов существует результаты в недопустимом определении подкласса.

Некоторый класс обновляет ситуации с причиной, в которых MATLAB не может обновить существующие объекты соответствовать определению модифицированного класса. Эти случаи приводят к ошибкам, пока вы не удаляете объекты:

  • Добавление перечисления блокируется к классу неперечисления

  • Переопределение класса, чтобы быть абстрактным

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

  • Обновляя класс, чтобы ограничить поведение формирования массивов, такое как перегрузка индексации массива и конкатенации.

  • Наследовав subsref, subsasgn, cat, vertcat или метод horzcat

  • Переопределение класса Handle, чтобы быть классом значения.

Потенциальные последствия обновлений класса

  • После обновления существующие объекты могут быть несовместимыми с новым определением класса. Например, недавно добавленное свойство может потребовать, чтобы казнь конструктора была допустима.

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

  • Удаление класса от неоднородной иерархии классов может привести к недопустимым элементам разнородного массива. В этом случае объект по умолчанию для неоднородной иерархии заменяет эти элементы массива.

Обновления Атрибутов класса

Изменение атрибутов класса может изменить существующее поведение объекта или сделать объекты недопустимыми. MATLAB возвращает ошибку, когда вы получаете доступ к недопустимым объектам.

ИзменениеЭффект

Сделайте Abstract = true

Доступ к существующим объектам возвращает ошибку.

Измените AllowedSubclasses

Недавно созданные объекты могут наследоваться различным суперклассам, чем существующие объекты.

Измените ConstructOnLoad

Загрузка классов повинуется текущей стоимости ConstructOnLoad.

Измените HandleCompatible

Недавно созданные объекты могут иметь различную иерархию классов, чем существующие объекты.

Измените Hidden

Внешний вид класса в списке суперклассов и доступа функцией help может измениться

Измените InferiorClasses

Диспетчеризация метода для существующих объектов может измениться.

Сделайте Sealed = true

Существующие объекты подкласса возвращают ошибки, когда получено доступ.

Обновления определений свойства

Когда вы изменяете определение свойств класса, MATLAB применяет изменения в существующих объектах класса.

ИзменениеЭффект

Addproperty

Добавляет новое свойство к существующим объектам класса. Устанавливает значения свойств на значение по умолчанию (который является [], если определение класса не задает значение по умолчанию).

Свойство Remove

Удаляет свойство из существующих объектов класса. Попытки получить доступ к удаленному сбою свойства.

Измените значение свойства по умолчанию

Не применяет новое значение по умолчанию к существующим объектам класса.

Переместите свойство между подклассом и суперклассом

Не применяет различное значение по умолчанию, когда определение свойства перемещается между суперклассом и подклассом.

Измените значение атрибута свойства

Применяет изменения в существующих объектах класса.

Некоторые случаи требуют переходных шагов:

  • Abstract — Существующие объекты класса, который становится абстрактным, не могут быть обновлены. Удалите эти объекты.

  • Доступ Изменения в public, protected или настройках доступа к свойству private влияют на доступ к существующим объектам.

    Изменения в списках доступа не изменяют существующие объекты. Однако, если вы добавляете классы к списку доступа, экземпляры тех классов имеют доступ к этому свойству. Если вы удаляете классы из списка доступа, объекты тех классов больше не имеют доступ к этому свойству.

  • Dependent — Если изменено на true, существующие объекты больше не хранят значения свойств. Если вы хотите запросить значение свойства, добавьте, что свойство получает метод для свойства.

  • Transient — Если изменено на true, объекты, уже сохраненные, перезагружают это значение свойства. Если изменено на false, объекты уже сохраненная перезагрузка это свойство с помощью значения по умолчанию.

Обновления определений метода

Когда вы изменяете определение методов класса, MATLAB изменяет затронутый член класса в существующих объектах можно следующим образом.

ИзменениеЭффект

Добавьте метод

Можно вызвать новый метод на существующих объектах класса.

Измените метод

Модификации доступны существующим объектам.

Удалите метод

Вы можете на удаленном методе более длинного вызова на существующих объектах.

Измените значение атрибута метода

Примените изменения в существующих объектах класса.

Некоторые случаи требуют переходных шагов:

  • Abstract — Существующие объекты класса, который становится абстрактным, не могут быть обновлены. Удалите эти объекты.

  • Доступ Изменения в методе public, protected или настройки доступа private влияют на доступ к существующим объектам.

    Изменения в списках доступа не изменяют существующие экземпляры. Однако, если вы добавляете классы к списку доступа, экземпляры тех классов имеют доступ к этому методу. Если вы удаляете классы из списка доступа, объекты тех классов больше не имеют доступ к этому методу.

  • Sealed — Если изменено на true и существующие подклассы уже задали метод, MATLAB возвращает ошибку, потому что новое определение класса не может быть применено к существующим подклассам.

Обновления определений события

ИзменениеЭффект

Addevent

Существующие объекты класса поддерживают новое событие.

Поменяйте имя события

Новое имя события видимо к существующим объектам класса. MATLAB:

  • Не обновляет существующие объекты метакласса

  • Действительно обновляет недавно полученные объекты метакласса

  • Не обновляет прослушиватели, чтобы использовать новое имя события

Событие Remove

Существующие объекты больше не поддерживают удаленное событие.

Измените значение атрибута события

Примените изменения в существующих объектах класса.

Некоторые случаи требуют переходных шагов:

  • ListenAccess — Изменения в событии public, protected или private слушают, настройки доступа влияют на доступ к существующим объектам.

    Изменения в списке доступа не изменяют существующие объекты. Однако, если вы добавляете классы к списку доступа, объекты тех классов могут создать прослушиватели для этого события. Если вы удаляете классы из списка доступа, объектам тех классов не позволяют создать прослушиватели для этого события.

  • NotifyAccess — Изменения в событии public, protected или private уведомляют, что настройки доступа влияют на доступ к существующим объектам.

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

Похожие темы

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