classdef ClassName < dynamicprops
descriptor = addprop(obj, name)
obj = rmprop(obj, name)
| Paramètre | Description |
|---|---|
| obj | un objet handle classdef scalaire qui herite de dynamicprops. |
| name | nom de propriete dynamique sous forme de vecteur de caracteres ou de chaine scalaire. |
| Paramètre | Description |
|---|---|
| descriptor | descripteur handle de propriete dynamique. |
| obj | le meme objet handle apres suppression de la propriete dynamique. |
dynamicprops est une classe de base classdef pour les classes handle qui ajoutent des proprietes a des instances individuelles pendant l'execution.
addprop(obj, name) ajoute une propriete dynamique a un objet. La propriete peut ensuite etre lue et ecrite avec l'acces par champ, par exemple obj.X.
rmprop(obj, name) supprime une propriete dynamique d'un objet. Les proprietes declarees par la classe ne peuvent pas etre supprimees avec rmprop.
Les proprietes dynamiques sont visibles via isprop, properties, l'acces par champ d'objet, metaclass et la conversion struct.
Le descripteur renvoye par addprop est un handle meta.DynamicProperty avec les champs Name, DefiningClass, Dynamic, Dependent, AbortSet, GetMethod, GetObservable, Hidden, NonCopyable, SetMethod, SetObservable, Transient, GetAccess, SetAccess et ValidationExpression.
AbortSet, Dependent, GetAccess, GetMethod, GetObservable, Hidden, NonCopyable, SetAccess, SetMethod, SetObservable, Transient et ValidationExpression peuvent etre modifies sur le descripteur. GetAccess et SetAccess acceptent public, private ou protected. GetMethod doit etre vide ou un handle de fonction appele comme value = f(obj). SetMethod doit etre vide ou un handle de fonction appele comme f(obj, value). Les proprietes dynamiques dependantes utilisent GetMethod et SetMethod au lieu de valeurs stockees. ValidationExpression utilise la meme syntaxe de validation que les proprietes declarees. Les proprietes dynamiques masquees restent accessibles par champ et via isprop, mais sont omises de properties. Les proprietes dynamiques non copiables sont omises par copy. Les proprietes dynamiques transitoires sont omises de la conversion struct et des donnees d'objet sauvegardees.
GetObservable active les listeners PreGet et PostGet pour la propriete dynamique. SetObservable active les listeners PreSet et PostSet. AbortSet evite les notifications de modification lorsque la valeur assignee est inchangee.
Les objets qui heritent de dynamicprops emettent PropertyAdded apres l'ajout d'une propriete dynamique et PropertyRemoved avant sa suppression. Les donnees d'evenement contiennent Source, EventName et PropertyName.
La suppression du descripteur avec delete(descriptor) supprime la propriete dynamique de l'objet source.
d = [tempdir(), 'nelson_help_dynamicprops/'];
if ~isdir(d)
mkdir(d);
end
filewrite([d, '/NelsonHelpDynamicProps.m'], ["classdef NelsonHelpDynamicProps < dynamicprops"; " properties"; " Base = 1"; " end"; "end"]);
addpath(d);
obj = NelsonHelpDynamicProps();
listenerAdded = addlistener(obj, 'PropertyAdded', @(src, eventData) disp(eventData.PropertyName));
listenerRemoved = addlistener(obj, 'PropertyRemoved', @(src, eventData) disp(eventData.PropertyName));
descriptor = addprop(obj, 'Extra');
obj.Extra = 42;
descriptor.Name
descriptor.Dynamic
descriptor.SetObservable = true;
setListener = addlistener(obj, 'Extra', 'PostSet', @(src, eventData) disp(eventData.PropertyName));
obj.Extra = 43;
descriptor.GetMethod = @(x) x.Base + 10;
obj.Extra
descriptor.GetMethod = [];
descriptor.Dependent = true;
descriptor.SetMethod = @(x, value) value;
descriptor.GetMethod = @(x) x.Base;
obj.Extra = 3;
obj.Extra
descriptor.Dependent = false;
descriptor.GetMethod = [];
descriptor.SetMethod = [];
descriptor.SetAccess = 'private';
descriptor.SetAccess = 'public';
descriptor.ValidationExpression = '(1, 1) double {mustBePositive}';
descriptor.NonCopyable = true;
descriptor.Hidden = true;
isprop(obj, 'Extra')
properties(obj)
descriptor.Hidden = false;
descriptor.Transient = true;
struct(obj)
delete(descriptor);
delete(listenerAdded);
delete(listenerRemoved);
delete(setListener);
isprop(obj, 'Extra')
clear obj descriptor;
rmpath(d);
rmdir(d, 's')
| Version | Description |
|---|---|
| 2.0.0 | version initiale |