Классы перечисления могут задать свойства сохранить значения данных. Участники перечисления представляют определенные значения для этих свойств, которые MATLAB® присваивает в конструкторе класса. Для получения информации об определении классов перечисления смотрите, Задают Классы Перечисления.
Классы перечисления, которые разделяют встроенные числовые или логические классы на подклассы, не могут задать или наследовать свойства. Для получения дополнительной информации об этом виде класса перечисления см. Полученные перечисления от Встроенных типов.
Задайте свойства в классе перечисления, если вы хотите сопоставить определенные данные с участниками перечисления, но не должны наследовать арифметику, упорядоченное расположение или другие операции, которые MATLAB задает для определенных встроенных классов.
Задайте класс перечисления, чтобы представлять значения RGB цветов в наборе цветов. Класс Colors
задает имена для цветов, каждый из которых использует значения RGB в качестве аргументов к конструктору класса:
classdef Colors properties R = 0 G = 0 B = 0 end methods function c = Colors(r, g, b) c.R = r; c.G = g; c.B = b; end end enumeration Blueish (18/255,104/255,179/255) Reddish (237/255,36/255,38/255) Greenish (155/255,190/255,61/255) Purplish (123/255,45/255,116/255) Yellowish (1,199/255,0) LightBlue (77/255,190/255,238/255) end end
Можно получить доступ к значениям свойств через участника перечисления:
Colors.Reddish.R
ans = 0.9294
Предположим, что вы хотите создать график с новым оттенком красного именованного Reddish
:
a = Colors.Reddish; [a.R,a.G,a.B]
ans = 0.9294 0.1412 0.1490
Используйте эти значения путем доступа к свойствам элемента перечисления. Например, функция myPlot
принимает участника перечисления Colors
как входной параметр. Функциональные доступы значения RGB, задающие цвет от значений свойств.
function h = myPlot(x,y,LineColor) h = line('XData',x,'YData',y); r = LineColor.R; g = LineColor.G; b = LineColor.B; h.Color = [r g b]; end
Создайте график с помощью красноватой цветной линии:
h = myPlot(1:10,1:10,Colors.Reddish);
Класс Colors
инкапсулирует определения стандартного набора цветов. Можно изменить определение класса перечисления цветов и не влиять на функции, которые используют перечисления.
Класс Cars
задает категории, используемые, чтобы инвентаризировать автомобили. Класс Cars
выводит от класса CarPainter
, который выводит от handle
. Абстрактный класс CarPainter
задает метод paint
, который изменяет свойство Color
, когда автомобиль окрашен в другой цвет.
Класс Cars
использует участников перечисления Colors
, чтобы задать конечное множество доступных цветов. Точное определение любого данного цвета может измениться независимо от класса Cars
.
classdef Cars < CarPainter enumeration Hybrid (2,'Manual',55,Colors.Reddish) Compact(4,'Manual',32,Colors.Greenish) MiniVan(6,'Automatic',24,Colors.Blueish) SUV (8,'Automatic',12,Colors.Yellowish) end properties (SetAccess = private) Cylinders Transmission MPG Color end methods function obj = Cars(cyl,trans,mpg,colr) obj.Cylinders = cyl; obj.Transmission = trans; obj.MPG = mpg; obj.Color = colr; end function paint(obj,colorobj) if isa(colorobj,'Colors') obj.Color = colorobj; else [~,cls] = enumeration('Colors'); disp('Not an available color') disp(cls) end end end end
Класс CarPainter
требует, чтобы его подклассы задали метод под названием paint
:
classdef CarPainter < handle methods (Abstract) paint(carobj,colorobj) end end
Задайте экземпляр класса Cars
:
c1 = Cars.Compact;
Цветом этого автомобиля является Greenish
, как задано перечислением Colors.Greenish
:
c1.Color
ans = Greenish
Используйте метод paint
, чтобы изменить автомобильный цвет:
c1.paint(Colors.Reddish) c1.Color
ans = Reddish