有的类属性是根据其他属性成员得到的,需要设定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面向对象编程——从入门到设计模式》