exponenta event banner

event.ClassInstateEvent класс

Пакет: событие
Суперклассы: 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