EDA365电子论坛网

标题: 设置MATLAB类(class)对象的属性(properties)类型 [打印本页]

作者: thinkfunny    时间: 2020-2-11 13:42
标题: 设置MATLAB类(class)对象的属性(properties)类型
9 A! V* b( W* D# A7 d1 O" {
在未公开的MATLAB类定义(classdef)特性(attributes),介绍了MATLAB一些未公开的特性,但是这可能还是远远不能满足我们的要求。比如说,有时我们需要强制限制某个属性的类型,以防止赋值的时候不必要的麻烦(这在C++/Java等语言是毋庸置疑的,因为C++/Java等语言是强定义类型)。比如有一个类,定了Width和Height两个属性,我们希望将这两个属性值定义为数值类型,防止用户不小心赋值为字符串或结构体。# W; F) _1 v. w1 r+ B+ h; [/ D
0 P$ A2 p" M( ^- \3 m4 D
在UDD类中,可以通过属性的DataType特性来轻松搞定这个问题,一个简易的做法,就是设置schema.prop函数的第二个参数。但是很不幸,在普通类中,并没有直接的公开解决方案。一个曲线救国的方案是重载属性的set方法(函数)
1 J4 q3 w8 E4 j/ \7 \2 Z2 m# N. ~& l3 q

7 }( Y' s# ]+ j! n" o不过Amro提供了一个更加简洁方便的方案  ^+ r' G  V$ [$ z3 f) H0 y
, \4 O8 l& `% U1 a" Z/ s2 f6 T
; k2 ?  Y8 i0 Q
$ w: A: }+ s2 K7 a0 u- h
Amro提示说,如果试图使用错误类型进行属性赋值,将返回错误! b; U' [! t, f
/ E" R' j5 P* M& ?& z

: @0 S! o# i1 D* H  p) _, i" Z7 }, h$ A
该语法格式支持所有的原始类型(char,inte32,double,struct,cell等),同时还支持任何自定义的类。
) i6 ~# Y) x% b8 ~  Y- I2 H! m  \/ w! l2 }; C; [3 d% @2 M
在MATLAB R2013a的$matlabroot/toolbox/matlab/graphics/+graphics/+internal/+figfile/@FigFile/FigFile.m文件我们可以找到类似应用,不过在R2012a中测试结果表明也是有效的。
% U2 i. I0 ?8 u5 E0 l  b# _6 z& I! P' x" Z
不过有点需要注意的,当使用上述方式设置属性值类型以后,将重载属性的所有set方法,也就是说属性自定义的set方法视乎失效了。
; R, T( c1 N# x) l! U% g
作者: ExxNEN    时间: 2020-2-11 19:53
设置MATLAB类(class)对象的属性(properties)类型




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2