目录
说明
handle 类是遵守句柄语义的所有类的超类。句柄是引用 handle 类的对象的变量。多个变量可以引用同一个对象。
handle 类是抽象类,这样无法直接创建该类的实例。使用 handle 类派生其他类,可以是其实例为句柄对象的具体类。
要定义 handle 类,请使用以下 classdef 代码中的语法从 handle 派生类。
classdef MyHandleClass < handle
...
end
从 handle 类派生使子类能够:
-
继承多个有用的方法 (Handle Class Methods)
-
定义事件和侦听程序 (事件和侦听程序语法)
-
定义动态属性 (动态属性 - 向实例添加属性)
-
实现 set 和 get 方法 (为属性实现 set/get 接口)
-
自定义复制行为 (Implement Copy for Handle Classes)
类属性
Abstract | true |
ConstructOnLoad | true |
HandleCompatible | true |
方法
公共方法
addistener | add创建绑定到事件源的事件侦听程序 |
listener | 创建未绑定到事件源的事件侦听程序 |
notify | 通知侦听程序事件正在发生 |
findobj | 查找句柄对象 |
findprop | 查找 meta.property 对象 |
delete | 删除句柄对象 |
isvalid | 确定有效句柄 |
relationaloperators | 确定相等性或排序句柄对象 |
empty | 创建指定类的空数组 |
事件
事件名称 | 触发器 | 事件数据 | 事件属性 |
---|---|---|---|
ObjectBeingDestroyed | 在句柄对象即将销毁但在调用 delete 方法之前触发。 | eventEventData | NotifyAccess: private ListenAccess: public |
示例
从 handle
派生类
MySubclass 类派生自 handle 类。属性 set 方法不返回传递给该方法的对象,而值类有此要求:
classdef MySubclass < handle
properties
Client tcpclient
end
methods
function set.Client(obj,c)
if isa(c,'tcpclient')
obj.Client = c;
end
end
end
end
创建 MySubclass 的对象,并将 tcpclient 对象分配给 Client 属性。
t = MySubclass;
t.Client = tcpclient('www.mathworks.com', 80);
句柄对象复制行为
复制句柄对象不会复制与该对象关联的基础数据。副本是引用同一对象的另一个句柄。因此,如果函数修改以输入参数形式传递的句柄对象,则该修改操作会影响调用方工作区中的原始输入对象。
与此相反,非句柄对象(即值对象)将数据与特定变量相关联。函数必须返回修改的值对象,以便在此函数的工作区外部更改对象。
销毁句柄对象
当不存在对句柄对象的引用时,MATLAB® 会销毁该对象。可以显式移除句柄对象,只需调用其 delete 方法即可。handle 类可以让您控制销毁句柄对象时的情况,可以是在不存在任何引用时隐式销毁,或者删除该对象时显式销毁。
为 ObjectBeingDestroyed 事件创建侦听程序
任何代码都可以通过为句柄对象的 ObjectBeingDestroyed 事件定义侦听程序来响应该对象的待定删除操作。MATLAB 会在调用该对象的 delete 方法之前触发此事件。