Задайте свойства класса с постоянными значениями

Определение именованных констант

Можно задать константы, к которым можно обратиться по наименованию путем создания класса MATLAB®, который задает постоянные свойства.

Используйте постоянные свойства задать постоянные значения, к которым можно получить доступ по наименованию. Создайте класс с постоянными свойствами путем объявления атрибута Constant в блоках свойства. Установка атрибута Constant означает, что, когда-то инициализированный к значению, заданному в блоке свойства, значение не может быть изменено.

Присвоение значений к Constant Properties

Присвойте любое значение свойству Constant, включая выражение MATLAB. Например:

classdef NamedConst
   properties (Constant)
      R = pi/180
      D = 1/NamedConst.R
      AccCode = '0145968740001110202NPQ'
      RN = rand(5)
   end
end

MATLAB выполняет выражения при загрузке класса. Поэтому значения, присвоения MATLAB к RN являются результатом одного вызова rand, функционируют и не изменяются с последующими ссылками на NamedConst.RN. Вызов clear classes заставляет MATLAB перезагружать класс и повторно инициализировать постоянные свойства.

Referencing Constant Properties

Обратитесь к постоянному использованию имени класса и имени свойства:

ClassName.PropName

Например, чтобы использовать класс NamedConst, заданный в предыдущем разделе, сошлитесь на константу для степени к преобразованию радиана, R:

radi = 45*NamedConst.R
radi =

    0.7854

Константы в пакетах

Чтобы создать библиотеку для, постоянные значения, к которым можно получить доступ по наименованию, сначала создайте папку пакета, затем задайте различные классы, чтобы организовать константы. Например, чтобы реализовать набор констант, которые полезны для того, чтобы сделать астрономические вычисления, задайте класс AstroConstants в пакете под названием constants:

+constants/@AstroConstants/AstroConstants.m

Класс задает набор свойств Constant с присвоенными значениями:

classdef AstroConstants
   properties (Constant)
   C = 2.99792458e8     % m/s
   G = 6.67259          % m/kgs
   Me = 5.976e24        % Earth mass (kg)
   Re = 6.378e6         % Earth radius (m)
   end
end

Чтобы использовать этот набор констант, сошлитесь на них с полностью определенным именем класса. Например, следующая функция использует некоторые константы, заданные в AstroContants:

function E = energyToOrbit(m,r)
   E = constants.AstroConstants.G * constants.AstroConstants.Me * m * ...
      (1/constants.AstroConstants.Re-0.5*r);
end

Импорт пакета в функцию избавляет от необходимости повторять имя пакета (см. import):

function E = energyToOrbit(m,r)
   import constants.*;
   E = AstroConstants.G * AstroConstants.Me * m * ...
      (1/AstroConstants.Re - 0.5 * r);
end

Постоянное свойство присвоило объект указателя

Если класс задает постоянное свойство со значением, которое является объектом указателя, можно присвоить значения свойствам объектов указателя. Создайте локальную переменную, чтобы получить доступ к объекту указателя.

Например, класс ConstMapClass задает постоянное свойство. Значение постоянного свойства является объектом указателя (объект containers.Map).

classdef ConstMapClass < handle
   properties (Constant)
      ConstMapProp = containers.Map
   end
end

Чтобы присвоить текущую дату ключу Date, возвратите указатель в постоянное свойство, затем сделайте присвоение с помощью локальной переменной на левой стороне оператора присваивания:

localMap = ConstMapClass.ConstMapProp
localMap('Date') = datestr(clock);

Вы не можете использовать ссылку на постоянное свойство на левой стороне оператора присваивания. Например, MATLAB интерпретирует следующий оператор как создание struct по имени ConstantMapClass с полем ConstMapProp:

ConstMapClass.ConstMapProp('Date') = datestr(clock);

Постоянное свойство присвоило любой объект

Можно присвоить экземпляр класса определения к постоянному свойству. MATLAB создает экземпляр, присвоенный постоянному свойству при загрузке класса. Используйте этот метод только, когда класс определения будет классом handle.

MyProject является примером такого класса:

classdef MyProject < handle
   properties (Constant)
      ProjectInfo = MyProject
   end
   properties
      Date
      Department
      ProjectNumber
   end
   methods (Access = private)
      function obj = MyProject
         obj.Date = datestr(clock);
         obj.Department = 'Engineering';
         obj.ProjectNumber = 'P29.367';
      end
   end
end

Ссылочные данные о свойстве через свойство Constant:

MyProject.ProjectInfo.Date
ans =

18-Apr-2002 09:56:59

Поскольку MyProject является классом Handle, можно получить указатель на экземпляр, который присвоен постоянному свойству:

p = MyProject.ProjectInfo;

Доступ к данным в классе MyProject с помощью этого указателя:

p.Department
ans =

Engineering

Измените непостоянные свойства класса MyProject с помощью этого указателя:

p.Department = 'Quality Assurance';

p является указателем на экземпляр MyProject, который присвоен ProjectInfo постоянное свойство:

MyProject.ProjectInfo.Department
ans =

Quality Assurance

Очистка класса приводит к присвоению нового экземпляра MyProject к свойству ProjectInfo.

clear MyProject
MyProject.ProjectInfo.Department
ans =

Engineering

Можно присвоить экземпляр класса определения как значение по умолчанию свойства только, когда свойство объявляется как Constant

Постоянные свойства — никакая поддержка не получает События

Постоянные свойства не поддерживают события свойства PreGet или PostGet. MATLAB выдает предупреждение во время инициализации класса, если вы устанавливаете атрибут GetObservable свойства Constant к true.

Связанные примеры

Больше о