classes with static (constant) properties

109 次查看(过去 30 天)
How do I define static class properties that are accessed without allocating the object?
By object I mean class instance. I would just need constant properties (snippet below) but would also like to know how it would work for non-static properties too. I definetely prefer method 2 over 1 but calling foo.prop1 may create a temporary object tmp of class foo. In detail: The call of prop1 is the made via tmp. After the value of prop1 has been returned, the temporary object tmp is destroyed (deallocated). The described behavior would cause a small but significant load on performance/memory that can accumulate when one uses method 2 a lot or very often.
Method 1 has its own problems, where one is definitely that complicated construction of the member with a function and a persistant variable.
classdef foo
% METHOD 1:
% static function, defines local persistent var that is returned on each call
% Upside: definitely static, no object instantiation
% Downside: little overhead (function call, var is set every call)
% Rem. quest: Name of persistent var must be unique in whole workspace?
methods (Static)
function out = prop1()
persistent prop1_loc;
prop1_loc = 1;
out = prop1_loc;
end
end
% METHOD 2:
% Constant properties that can be accesses in the same manner as the static function
% Upside: Simple, shorter that method 1.
% Downside: None, unless the object is not instantiated by a call of foo.prop1
% Rem. quest: Does call to prop allocate an object (class instance)?
properties(Constant)
prop1 = 1;
prop2 = 2;
end
end
%%%%%%%% %%%%%%%%
%called like
x = foo.prop1;
func(foo.prop1);

采纳的回答

Matt J
Matt J 2021-8-5
编辑:Matt J 2021-8-5
No, an object is not created with method 2. An easy way to verify that is with the following small test class. You can see that the constructor is never called when the constant property is accessed.
>> myclass.prop
ans =
0
classdef myclass
properties (Constant)
prop=0;
end
methods
function obj=myclass
disp 'Constructing' %Alert us if constructor is called.
end
end
end
  1 个评论
Florian B
Florian B 2021-8-7
Completely logical. Should have found that solution myself but I have not used constructors in MATLAB classes yet.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Class File Organization 的更多信息

产品


版本

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by