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

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

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

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

Присвоение значений постоянным свойствам

Присвойте любое значение 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 и повторной инициализации свойств константы.

Ссылки на свойства константы

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

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

Свойство Constant, назначенное объекту указатель

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

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

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

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

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

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

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

Свойство Constant присваивает любому объекту

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

The 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, можно получить указатель на образец, который назначен свойству constant:

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

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

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

Похожие примеры

Подробнее о