文档

定义枚举类

枚举类

创建枚举类,方法为枚举块到类定义。例如,工作日班级列举一周中的几天。

classdef工作日枚举星期一,星期二,星期三,星期四,星期五结束结束

执行MATLAB®代码在下面的章节中,放置工作日类的定义00在你的路径上归档。

构造枚举成员

使用类名和成员名引用枚举成员:

类名称MemberName

例如,赋值枚举成员工作日。周二对该变量今天

今天= WeekDays.Tuesday;

今天是类的变量吗工作日

Name Size Bytes Class Attributes today 1x1 104 WeekDays
今天
今天=星期二

转换为超类值

如果枚举类指定了超类,则通过将对象传递给超类构造函数将枚举对象转换为超类。但是,超类构造函数必须能够接受它自己的类作为输入并返回超类的实例。MATLAB内置的数值类,如uint32,允许这种转换。

例如,轴承类源于uint32内置类:

classdef轴承< uint32枚举北(0)东(90)南(180)西(270)结束结束

分配轴承。东变量的成员一个

一个= Bearing.East;

通过一个返回父类构造函数并返回uint32值:

b = uint32(一个);谁
Name Size Bytes Class Attributes a 1x1 60 Bearing b 1x1 4 uint32

uint32构造函数接受子类的对象轴承并返回一个类的对象uint32

在枚举类中定义方法

像任何MATLAB类一样在枚举类中定义方法。例如,这里是工作日类,并调用方法isMeetingDay补充道:

classdef工作日枚举星期一,星期二,星期三,星期四,星期五结束方法函数tf = = ~(WeekDays. (obj))周二= = obj);结束结束结束

调用isMeetingDay的实例工作日类:

今天= WeekDays.Tuesday;today.isMeetingDay
ans = 0

直接使用枚举成员作为方法的输入:

isMeetingDay (WeekDays.Wednesday)
ans = 1

在枚举类中定义属性

当必须存储与枚举成员相关的数据时,向枚举类添加属性。在类构造函数中设置属性值。例如,SyntaxColors类定义了三个属性,当引用类成员时,构造函数将它们的值赋给输入参数的值。

classdefSyntaxColors属性R G B结束方法函数c = SyntaxColors(r, g, b);c.G = g;c.B = b;结束结束枚举关键字(0,0,1)String (1,0,1)结束结束

当引用枚举成员时,构造函数初始化属性值:

e = SyntaxColors.Error;在途中
ans = 1

因为SyntaxColors是一个值类(它不是派生的处理),只有类构造函数可以设置属性值:

急诊= 0
不能设置SyntaxColors的只读属性“R”。

有关定义属性的枚举类的更多信息,请参见可变句柄与不可变值枚举成员

枚举类构造函数调用序列

枚举块中的每个语句都是枚举成员的名称,后面可选地跟一个参数列表。如果枚举类定义了构造函数,MATLAB就调用构造函数来创建枚举实例。

MATLAB为所有没有显式定义构造函数的枚举类提供默认构造函数。默认构造函数创建枚举类的一个实例:

  • 如果枚举成员没有定义输入参数,则不使用输入参数

  • 使用在枚举类中为该成员定义的输入参数

的输入参数保龄球0保龄球没有1保龄球是的

classdefBool <逻辑枚举否(0)是(1)结束结束

的值01的类逻辑因为默认构造函数将参数传递给第一个超类。也就是这句话:

n = Bool.No;

导致呼叫逻辑这等价于构造函数中的以下语句:

函数obj = Bool(val) obj@logical(val)结束

MATLAB只将成员参数传递给第一个超类。例如,假设保龄球派生自另一个类:

classdefBool < logical & MyBool枚举否(0)是(1)结束结束

MyBool类可以添加一些特殊的行为:

classdefMyBool方法函数boolValues = testBools (obj)...结束结束结束

默认的保龄球构造函数的行为就像这样定义的函数:

  • 传递给第一个超类构造函数的参数

  • 不向后续构造函数传递参数

函数obj = Bool(val) obj@logical(val) obj@MyBool结束

相关的话题