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

Private propeties from class method ändern

 

FeLe
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 21.08.2012, 12:42     Titel: Private propeties from class method ändern
  Antworten mit Zitat      
Hallo alle zusammen,
Ich habe wieder ein kleines Problemchen und möchte euch um Rat bitten.

Das Ziel ist: Property einer Klasse nur aus der Instance der Klasse selbst ändern zu lassen. Das versuche ich mit properties atribute SetAccess = private zu machen.
Es soll beim versuch:
Code:

Set.propertieName(obj, value)
 


Error kein zugrief!
Und beim:

Code:

Obj.setProp(value)
 


Interne Method soll neuen Wert für Property übernehmen.
Hier ist meinen Code:

Code:

classdef myClass
    % Everybody can see property value but only obj intern method can change it
    % that
    properties (SetAccess = private, GetAccess = public)
        sID;
    end
   
    methods
        % Constructor Method
        function obj = myClass(varargin)
            switch nargin
                case 0
                    setsID('');
                case 1
                    obj.setsID(varargin{1});
                otherwise
                    error('Call of myClass constructor with to many arguments!')
            end
        end
        %
        function setsID(val)
            if ischar(val)
                sID = val;
            else
                error('Input must be class char!')
            end
        end
    end
end
 


beim versucht Objekt zu erzeugen scheitert der Construktor mit der Fehlermeldung:

Code:

>> A = myClass
??? Error using ==> setsID
Too many input arguments.

Error in ==> myClass>myClass.myClass at 14
                    obj.setsID(var);
 


Warum??? Verstehe ich nicht Sad
Private Nachricht senden Benutzer-Profile anzeigen


FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 21.08.2012, 14:28     Titel:
  Antworten mit Zitat      
Hallo
Ich habe unter dem Thema "Propertie in Klasse wird nicht zugewiesen" die Lösung gefunden:
Code:
classdef myClass < hgsetget
    % Everybody can see property value but only obj intern methode can change
    % that
    properties (SetAccess = private, GetAccess = public)
        sID;
    end
   
    methods
        % Constructor Method
        function obj = myClass(varargin)
            switch nargin
                case 0
                    obj.sID = '';
                case 1
                    obj.sID = varargin{1};
                otherwise
                    error('Call of myClass constructor with to many arguments!')
            end
        end
       
        % Definition of set function
        function set.sID(obj, var)
            obj.sID = var;
        end
       
        % Function for access from outside
        function setsID(obj, var)
            if ischar(var)
                obj.set('sID', var);
            else
                error('Input must be class char!')
            end
        end
    end
end


Verstehe aber trotzdem nicht; warum ich den Weg über noch eine Funktion gehen soll. Wird in der Classe deklarierte Set funktion nicht als Classen intere behandelt? Warum beraucht man noch eine interne Funktion die dadrauf zugreifen kann?

Bitte um eine Erklärung für Dummies. Embarassed
Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.08.2012, 14:37     Titel:
  Antworten mit Zitat      
Hallo,

das müsste doch auch so gehen?
Code:

        function setsID(obj, var)
            if ischar(var)
                obj.sID = var;  % direkt hier
            else
                error('Input must be class char!')
            end
        end


Dann kannst du dir die zusätzliche set-Routine schenken. So etwas würde ich nur programmieren, wenn set eben was anderes machen soll als normal. Z.B. könntest du das auch andersherum angehen und die Fehlerüberprüfung in der set-Routine machen, und dann
Code:
direkt in den Konstruktor setzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 21.08.2012, 16:25     Titel:
  Antworten mit Zitat      
Vielen Dank Harald!
Ich glaube ich verstehe jetzt besser Smile
Mfg
FeLe
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.