| Contents | Index |
| On this page… |
|---|
Class definitions can specify explicit default values for properties (see Defining Default Values). You can obtain the default value of a property from the property's associated meta.property object. The meta.class object for a class contains a meta.property object for every property defined by the class, including properties with private and protected access. For example:
mc = ?MException; % meta.class object for MException class mp = mc.PropertyList; % Array of meta.property objects mp(1) % meta.property object for 'type' property ans = meta.property handle Package: meta Properties: Name: 'type' Description: 'Type of error reporting' DetailedDescription: '' GetAccess: 'private' SetAccess: 'private' Dependent: 0 Constant: 0 Abstract: 0 Transient: 0 Hidden: 0 GetObservable: 1 SetObservable: 1 AbortSet: 0 GetMethod: [] SetMethod: [] HasDefault: 1 DefaultValue: {} DefiningClass: [1x1 meta.class]
Two meta.property object properties provide information on default values:
HasDefault — True if class specifies a default value for the property, false if it does not.
DefaultValue — Contains the default value, if the class defines a default value for the property.
These properties provide a programmatic way to obtain property default values without reading class definition files. Use these meta.property object properties to obtain property default values for built-in classes and classes defined in MATLAB code.
The procedure for querying a default value involves:
Getting the meta.property object for the property whose default value you want to query.
Testing the logical value of the meta.property HasDefault property to determine if the property defines a default value. MATLAB returns an error when you query the DefaultValue property if the class does not define a default value for the property.
Obtaining the default value from the meta.property DefaultValue property if the HasDefault value is true.
Use the ? operator, the metaclass function, or the meta.class.fromName static method (works with string variable) to obtain a meta.class object. The meta.class object PropertyList property contains an array of meta.property objects. Identify which property corresponds to which meta.property object using the meta.property Name property.
For example, this class defines properties with default values:
classdef MyDefs properties Material = 'acrylic'; InitialValue = 1.0; end end
Follow these steps to obtain the default value defined for the Material property. Include any error checking that is necessary for your application.
Get the meta.class object for the class:
mc = ?MyDefs;
Get an array of meta.property objects from the meta.class PropertyList property:
mp = mc.PropertyList;
The length of the mp array equals the number of properties. You can use the meta.property Name property to find the property of interest:
for k = 1:length(mp) if (strcmp(mp(k).Name,'Material')
Before querying the default value of the Material property, test the HasDefault meta.property to determine if MyClass defines a default property for this property:
if mp(k).HasDefault dv = mp(k).DefaultValue; end end end
The DefaultValue property is read only. Changing the default value in the class definition changes the value of DefaultValue property. You can query the default value of a property regardless of its access settings.
Abstract and dynamic properties cannot define default values. Therefore, MATLAB returns an error if you attempt to query the default value of properties with these attributes. Always test the logical value of the meta.property HasDefault property before querying the DefaultValue property to avoid generating an error.
Class definitions can define property default values as MATLAB expressions (see Expressions in Class Definitions for more information). MATLAB evaluates these expressions the first time the default value is needed, such as the first time you create an instance of the class.
Querying the meta.property DefaultValue property causes MATLAB to evaluate a default value expression, if it had not yet been evaluated. Therefore, querying a property default value can return an error or warning if errors or warnings occur when MATLAB evaluates the expression. See Property With Expression That Errors for an example.
MyClass does not explicitly define a default value for the Foo property:
classdef MyFoo properties Foo end end
The meta.property instance for property Foo has a value of false for HasDefault. The class does not explicitly define a default value for Foo. Therefore, attempting to access the DefaultValue property causes an error:
mc = ?MyFoo;
mp = mc.PropertyList(1);
mp.HasDefault
ans =
0
dv = mp.DefaultValue;
No default value has been defined for property FooMyClass defines the Foo property as Abstract:
classdef MyAbst properties (Abstract) Foo end end
The meta.property instance for property Foo has a value of false for its HasDefault property because you cannot define a default value for an Abstract property. Attempting to access DefaultValue causes an error:
mc = ?MyAbst;
mp = mc.PropertyList(1);
mp.HasDefault
ans =
0
dv = mp.DefaultValue;
Property Foo is abstract and therefore cannot have a default value.
MyPropEr defines the Foo property default value as an expression that errors.
classdef MyPropEr properties Foo = sin(pie/2); end end
The meta.property instance for property Foo has a value of true for its HasDefault property because Foo does have a default value determined by the evaluation of the expression:
sin(pie/2)
However, this expression returns an error (pie is a function that creates a pie graph, not the value pi).
mc = ?MyPropEr;
mp = mc.PropertyList(1);
mp.HasDefault
ans =
1
dv = mp.DefaultValue;
Error using pie
Not enough input arguments.
Querying the default value causes the evaluation of the expression and returns the error.
MyEmptyProp assigns a default of [] (empty double) to the Foo property:
classdef MyEmptyProp properties Foo = []; end end
The meta.property instance for property Foo has a value of true for its HasDefault property. Accessing DefaultValue returns the value []:
mc = ?MyEmptyProp;
mp = mc.PropertyList(1);
mp.HasDefault
ans =
1
dv = mp.DefaultValue;
dv =
[]
![]() | Get Information About Properties | Specializing Object Behavior | ![]() |

Includes the most popular MATLAB recorded presentations with Q&A sessions led by MATLAB experts.
| © 1984-2012- The MathWorks, Inc. - Site Help - Patents - Trademarks - Privacy Policy - Preventing Piracy - RSS |