WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

"protected" property über Funktion der Elternklas

 

Nicolas S.
Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 20.11.2018, 10:10     Titel: "protected" property über Funktion der Elternklas
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Klasse, deren Variablen/Properties ich vor versehentlichem Schreibzugriff schützen will:
Code:

classdef stupidChild < tweakable
    properties (SetAccess = protected)
        a;
        b;
    end
end
 


Allerdings will ich den absichtlichen Schreibzugriff über eine Wächter-Funktion zulassen. Mein naiver erster Versuch:
Code:

classdef tweakable
    %TWEAKABLE Classes where "protected" variables can be overwritten
    %by guardian function
    properties (SetAccess = protected)
        c;
    end    


    methods
        function self = tweak(self, varargin)
            %TWEAK Guardian function - allows overwriting of protected
            %variables
            if( isempty(varargin) )
                error('tweak:minrhs', 'Not enough input arguments.');
            end

            % Argument processing
            OptionalArgs = properties(self);
            Arg = struct(varargin{:});
            RemainingArgs = setdiff(fieldnames(Arg), OptionalArgs);

            % Invalid keywords
            if( numel(RemainingArgs) > 0 )
                error('tweak:noSuchMethodOrField', ...
                    'No appropriate method, property, or field ''%s'' for class %s', ...
                    RemainingArgs{1}, class(self));
            end

            % Manipulate field content
            Fieldnames = fieldnames(Arg);
            for i = 1:numel(Fieldnames)
                keyword = Fieldnames{i};
                value = Arg.(keyword);
                self.(keyword) = value;
            end
           
            %log('tweak: %s', keyword);
        end        
    end
end
 


Naiv deshalb, weil ich bislang davon ausgegangen bin, dass eine Funktion der Elternklasse als Funktion der Klasse gilt. Aber dem ist nicht so:
Code:

C = stupidChild();
C = C.tweak('c', 14);
C = C.tweak('a', 3); % Error: You cannot set the read-only property 'a' of stupidChild.
 

Wieder etwas gelernt.

Aber wie kann ich jetzt den Zugriff erlauben? Muss ich die "tweak"-Funktion in jeder Kindklasse einzeln implementieren?

Viele Grüße
Nicolas
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.