主要内容

定义枚举类

枚举类

类来创建枚举类枚举块到一个类定义。例如,工作日类枚举一周中的一组天。

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

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

构造一个枚举成员

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

类名称MemberName

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

今天= WeekDays.Tuesday;

今天是类的变量吗工作日

名称大小字节类属性今天1x1 104工作日
今天
今天=星期二

转换为超类值

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

例如,轴承类派生自uint32内置类:

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

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

一个= Bearing.East;

通过一个赋给超类构造函数并返回一个uint32值:

b = uint32(一个);谁
名称大小字节类属性a 1x1 4轴承b 1x1 4 uint32

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

在枚举类中定义方法

在枚举类中定义方法,就像任何MATLAB类一样。例如,定义一个方法称为isMeetingDay工作日枚举类中。用例是用户在周二有一个重复的会议。方法检查输入参数是否为工作日成员周二

classdef工作日枚举星期一、星期二、星期三、星期四、星期五结束方法函数tf = isMeetingDay(obj) tf =工作日。周二= = obj;结束结束结束

调用isMeetingDay的实例工作日类:

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

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

isMeetingDay (WeekDays.Wednesday)
ans = 0

在枚举类中定义属性

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

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

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

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

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

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

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

枚举类构造函数调用序列

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

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

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

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

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

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

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

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结束

相关的话题