matlab类property的dependent属性

有的类属性是根据其他属性成员得到的,需要设定Dependent = True并为他声明get方法以初始化。原因是,如果只在构造函数中声明该成员,当其依赖的成员发生变化,需要调用方法更新成员。但Dependent属性的成员没有物理的存储空间,每次访问时都将被动态计算。

properties
	item1
	item2
end

properties (Dependent = True, SetAccess = Private) 
	%GetAccess会为该属性赋值,故Set为private
	total
end

methods
	function obj = classname(x, y)
		item1 = x;
		item2 = y;
	end
	function total = get.total (obj)
		ind = find (obj.item2 > 0);
		total = obj.item1(ind) / obj.item2(ind);
	end
end

使用get方法的另一个原因是,访问该成员可以使用dot和向量化操作。即,obj.total(1:3),或结构体obj.total.otherfields. 普通方法则不可以。

对Dependent的属性成员,不需要Set方法,但是可以建立一个Set方法,当用户输入的时候,提示报错:不需要为该属性赋值。

methods
	function totalError = set.total ( obj, ~ )
		fprintf ("%s%d\n", "Total is", obj.total);
		error ( "You cannot set total explicitly.");
	end
end

应用:
从GUI界面获得用户在文本剪辑控件中string的值:

function str = get.text(obj)
	str = get(obj.hEdit, 'String')%obj.Edit是文本编辑空间
end

防止0输入的方法:赋值前检查 if ( nargin > 0) 再赋值
例如在初始化的时候,值不够,则赋为空(’’, [])

来源于MATLAB OOP文档以及《MATLAB面向对象编程——从入门到设计模式》

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值