event.ClassInstanceEvent class

Пакет: событие
Суперклассы: event.EventData

Данные о событиях для InstanceCreated и InstanceDestroyed события

Описание

Этот класс задает данные о событиях, которые передаются прослушивателям meta.class InstanceCreated и InstanceDestroyed события.

event.ClassInstanceEvent классом является handle класс.

Атрибуты класса

Sealed
true
ConstructOnLoad
true
HandleCompatible
true
RestrictsSubclassing
true

Для получения информации об атрибутах класса см. Атрибуты класса.

Создание

MATLAB® создает event.ClassInstanceEvent возразите при инициировании InstanceCreated или InstanceDestroyed событие.

Свойства

развернуть все

Объект создан или удален.

Атрибуты:

GetAccess
public
SetAccess
private
GetObservable
true
SetObservable
true

Типы данных: object

meta.class объект, который является источником события, возвратился как meta.class объект.

Атрибуты:

GetAccess
public
SetAccess
private
GetObservable
true
SetObservable
true

Типы данных: meta.class

Имя события, возвращенного как вектор символов, который является любой InstanceCreated или InstanceDestroyed.

Атрибуты:

GetAccess
public
SetAccess
private
GetObservable
true
SetObservable
true

Типы данных: char

Примеры

свернуть все

Используйте meta.class события, чтобы считать количество экземпляров как объекты создаются и уничтожаются.

Создайте класс с функцией обратного вызова для InstanceCreated и InstanceDestroyed события. eventCallback статический метод использует персистентную переменную, чтобы сохранить количество экземпляров класса, которые существуют. addEventListeners метод добавляет прослушиватели meta.class объект для CountInstances класс.

classdef CountInstances
    methods (Static)
        function eventCallback(~,eventData)
            % Callback for InstanceCreated and InstanceDestroyed
            persistent instanceCount
            if ~isempty(instanceCount)
                switch eventData.EventName
                    case "InstanceCreated"
                        instanceCount = instanceCount + 1;
                    case "InstanceDestroyed"
                        if ~instanceCount == 0
                            instanceCount = instanceCount - 1;
                        end
                end
            else
                instanceCount = 1;
            end
            fprintf('%s %d \n',...
                'Number of Instances: ',instanceCount)
        end
        function addEventListeners(mc)
            % Add listeners
            addlistener(mc,"InstanceCreated",...
                @(src,evnt)CountInstances.eventCallback(src,evnt));
            addlistener(mc,"InstanceDestroyed",...
                @(src,evnt)CountInstances.eventCallback(src,evnt));
        end
    end
end

Создайте meta.class объект для CountInstances класс и добавляет прослушиватели для InstanceCreated и InstanceDestroyed события. Этот пример использует тот же коллбэк для обоих событий.

mc = ?CountInstances;
CountInstances.addEventListeners(mc)

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

obj1 = CountInstances;
Number of Instances:  1
obj2 = CountInstances;
Number of Instances:  2 
clear obj1
Number of Instances:  1 

Используйте meta.class события, чтобы наблюдать создание и разрушение объектов

Создайте класс с функцией обратного вызова для InstanceCreated и InstanceDestroyed события. eventCallback статический метод служит функцией обратного вызова для обоих событий. addEventListeners метод добавляет прослушиватели meta.class объект для ClassInstanceEvent класс.

classdef ClassInstanceListeners
    properties
        Prop
    end
    methods
        function obj = ClassInstanceListeners(p)
            obj.Prop = p;
        end
    end
    methods (Static)
        function eventCallback(~,eventData)
            % Callback for InstanceCreated and InstanceDestroyed
            I = eventData.Instance;
            S = eventData.Source;
            E = eventData.EventName;
            dashLine = sprintf('%s\n','--------------------');
            fprintf('%s',dashLine)
            fprintf('%s \n',['Class: ',class(I)])
            fprintf('%s %d \n',[S.PropertyList.Name ': '],I.Prop)
            fprintf('%s%s \n','Event: ', E)
            fprintf('%s',dashLine)
        end
        function addEventListeners(mc)
            % Add listeners
            addlistener(mc,"InstanceCreated",...
                @(src,evnt)ClassInstanceListeners.eventCallback(src,evnt));
            addlistener(mc,"InstanceDestroyed",...
                @(src,evnt)ClassInstanceListeners.eventCallback(src,evnt));
        end
    end
end

Создайте meta.class объект для CreateInstanceListeners класс и добавляет прослушиватели для InstanceCreated и InstanceDestroyed события. Этот пример использует тот же коллбэк для обоих событий. Создайте экземпляр CreateInstanceListeners класс и присвоение идентификатор к свойству Prop.

mc = ?ClassInstanceListeners;
ClassInstanceListeners.addEventListeners(mc)
obj = ClassInstanceListeners(1334);
--------------------
Class: ClassInstanceListeners 
Prop:  1334 
Event: InstanceCreated 
--------------------

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

obj = ClassInstanceListeners(7335);
--------------------
Class: ClassInstanceListeners 
Prop:  7335 
Event: InstanceCreated 
--------------------
--------------------
Class: ClassInstanceListeners 
Prop:  1334 
Event: InstanceDestroyed 
--------------------

Если вы изменяете определение класса, MATLAB удаляет meta.class возразите, потому что это больше не допустимое описание класса. После изменения класса необходимо создать новый meta.class возразите и добавьте прослушиватели его.

Смотрите также

|

Введенный в R2008a