主要内容

定义枚举类

枚举类

通过添加一个创建一个枚举类枚举块类定义。例如,工作日类列举了一系列的日子。

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

执行MATLAB®代码在下面几节中,将工作日类定义在一个00文件在你的路径。

构造一个枚举成员

指一个枚举成员使用类名和成员的名字:

类名称MemberName

例如,枚举成员分配WeekDays.Tuesday对该变量今天:

今天= WeekDays.Tuesday;

今天是一个变量的类工作日:

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

转换为超类值

如果一个枚举类指定一个超类,可以将枚举对象转换为超类对象传递至超类构造函数。然而,超类构造函数必须能够接受自己的类作为输入,并返回一个超类的实例。MATLAB内置数字类,如uint32,允许这种转换。

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

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

分配Bearing.East成员变量一个:

一个= Bearing.East;

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

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

uint32构造函数接受一个子类的对象轴承并返回一个对象的类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 c (r, g, b)。R = 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为所有枚举类,提供一个默认的构造函数没有明确定义一个构造函数。默认构造函数创建一个枚举类的实例:

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

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

例如,输入参数的Bool0Bool.No1Bool.Yes

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

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

n = Bool.No;

在调用结果逻辑这相当于在构造函数如下声明:

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

MATLAB传递参数只有第一个超类成员。例如,假设Bool来源于另一个类:

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

MyBool类可以添加一些专门的行为:

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

默认的Bool构造函数的行为如果这样定义函数:

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

  • 没有参数传递给后续的构造函数

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

相关的话题