Классы перечисления могут задать свойства сохранить значения данных. Участники перечисления представляют определенные значения для этих свойств, которые 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