event.ClassInstanceEvent 类
包: event
超类: event.EventData
InstanceCreated
和 InstanceDestroyed
事件的事件数据
说明
此类定义传递给 meta.class
InstanceCreated
和 InstanceDestroyed
事件的侦听程序的事件数据。
event.ClassInstanceEvent
类是 handle
类。
创建对象
在触发 InstanceCreated
或 InstanceDestroyed
事件时,MATLAB® 会创建一个 event.ClassInstanceEvent
对象。
属性
Instance
— 要创建或删除的对象
对象
要创建或删除的对象。
属性:
GetAccess | public |
SetAccess | private |
GetObservable | true |
SetObservable | true |
数据类型: object
Source
— 作为事件源的 meta.class 对象
meta.class
作为事件源的 meta.class
对象,以 meta.class
对象形式返回。
属性:
GetAccess | public |
SetAccess | private |
GetObservable | true |
SetObservable | true |
数据类型: meta.class
EventName
— 事件名称
字符向量
事件的名称,以 InstanceCreated
或 InstanceDestroyed
字符向量形式返回。
属性:
GetAccess | public |
SetAccess | private |
GetObservable | true |
SetObservable | true |
数据类型: char
示例
实例的计数
使用 meta.class
事件来对创建和销毁对象时的实例数量进行计数。
为 InstanceCreated
和 InstanceDestroyed
事件创建一个具有回调函数的类。eventCallback
静态方法使用持久变量来存储现有类的实例数。addEventListeners
方法将侦听程序添加到 CountInstances
类的 meta.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
类创建 meta.class
对象,并为 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
方法将侦听程序添加到 ClassInstanceEvent
类的 meta.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
类创建 meta.class
对象,并为 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 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)