Main Content

event.ClassInstanceEvent 类

命名空间: event
超类: event.EventData

InstanceCreatedInstanceDestroyed 事件的事件数据

描述

此类定义传递给 matlab.metadata.Class InstanceCreatedInstanceDestroyed 事件的侦听程序的事件数据。

event.ClassInstanceEvent 类是一个 handle 类。

类属性

Sealed
true
ConstructOnLoad
true
HandleCompatible
true
RestrictsSubclassing
true

有关类属性的信息,请参阅类属性

创建对象

在触发 InstanceCreatedInstanceDestroyed 事件时,MATLAB® 会创建一个 event.ClassInstanceEvent 对象。

属性

全部展开

要创建或删除的对象。

属性:

GetAccess
public
SetAccess
private
GetObservable
true
SetObservable
true

数据类型: object

作为事件源的 matlab.metadata.Class 对象,以 matlab.metadata.Class 对象形式返回。

属性:

GetAccess
public
SetAccess
private
GetObservable
true
SetObservable
true

事件的名称,以 InstanceCreatedInstanceDestroyed 字符向量形式返回。

属性:

GetAccess
public
SetAccess
private
GetObservable
true
SetObservable
true

数据类型: char

示例

全部折叠

使用 matlab.metadata.Class 事件来对创建和销毁对象时的实例数量进行计数。

InstanceCreatedInstanceDestroyed 事件创建一个具有回调函数的类。eventCallback 静态方法使用持久变量来存储现有类的实例数。addEventListeners 方法将侦听程序添加到 CountInstances 类的 matlab.metadata.Class 对象。

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

CountInstances 类创建 matlab.metadata.Class 对象,并为 InstanceCreatedInstanceDestroyed 事件添加侦听程序。此示例对这两个事件使用相同的回调。

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 

使用 matlab.metadata.Class 事件来观察对象的创建和销毁

InstanceCreatedInstanceDestroyed 事件创建一个具有回调函数的类。eventCallback 静态方法充当这两个事件的回调函数。addEventListeners 方法将侦听程序添加到 ClassInstanceEvent 类的 matlab.metadata.Class 对象。

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

CreateInstanceListeners 类创建 matlab.metadata.Class 对象,并为 InstanceCreatedInstanceDestroyed 事件添加侦听程序。此示例对这两个事件使用相同的回调。构造 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 会删除 matlab.metadata.Class 对象,因为它不再是该类的有效描述。在修改类后,您必须创建新的 matlab.metadata.Class 对象并向其中添加侦听程序。

版本历史记录

在 R2008a 中推出