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);
0 个评论
采纳的回答
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Class File Organization 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!