exponenta event banner

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

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

Можно определить константы, на которые можно ссылаться по имени, создав класс 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

Свойство константы, назначенное объекту-дескриптору

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

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

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

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

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

Нельзя использовать ссылку на свойство константы в левой части инструкции назначения. Например, MATLAB интерпретирует следующую инструкцию как создание struct названный ConstMapClass с полем 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 является классом дескриптора, можно получить дескриптор экземпляра, который назначен свойству константы:

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.

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

Подробнее