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

Zugriff auf private properties

 

stealth_mx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 04.03.2015, 15:21     Titel: Zugriff auf private properties
  Antworten mit Zitat      
Hallo zusammen,

habe mir mal dieses Beispiel angeguckt und dabei auf eine Sache gestoßen die ich nicht verstehe:

http://de.mathworks.com/company/new...../news_notes/2008/oop.html

Ich habe mir ein einfaches Beispiel nachgebaut:

Code:

classdef sensorsClass
   
    properties (GetAccess=private)
        ID;
    end
    properties (Constant)
        Rate = 1000;
    end
    properties (Dependent)
        NumOfSensors;
    end
    properties (GetAccess=public)
        Name;
        Price;
    end
    methods
        % Constructor
        function obj=sensorsClass(NameObj,PriceObj,IDObj)
            obj.Name = NameObj;
            obj.Price = PriceObj;
            obj.ID = IDObj;
        end
        % Functions
        function ListedID=getID(obj)
           ListedID = obj.ID;
        end
    end
end
 


Habe mir eine Klasse erstellt und die ID einfachmal auf private gesetzt. Ich gehe nun davon aus, dass ich nur durch den Konstruktor einmalig die ID setzten kann.

Erstellung eines Objekts im Command Window:

Code:
Testobjekt = sensorsClass('Tester',50,1337)


Nun wenn ich nach dem "Testobjekt PUNKT" Tab drücke kann ich die "ID" sehen. Zugriff gibt jedoch eine Fehlermeldung aus.
Meine Frage:
Warum zeigt er überhaupt die ID an, wenn sie auf private ist?
Was mich dann noch wundert ist, dass ich die ID einfach so ändern kann:

Code:
Testerobjekt.ID = 30


Wo habe ich einen Fehler gemacht? Denn nach meinem Ablauf bringt mir private nichts. Da ich trotzdem vollen Zugriff habe.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2015, 19:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Habe mir eine Klasse erstellt und die ID einfachmal auf private gesetzt. Ich gehe nun davon aus, dass ich nur durch den Konstruktor einmalig die ID setzten kann.

Das stimmt nicht ganz. Private properties können von Klassenmethoden überschrieben / abgefragt werden, aber nicht von außerhalb.

Zitat:
Nun wenn ich nach dem "Testobjekt PUNKT" Tab drücke kann ich die "ID" sehen.

Bei mir, unter R2014b, nicht.

Zitat:
Was mich dann noch wundert ist, dass ich die ID einfach so ändern kann:

Du hast GetAccess beschränkt. Für das Überschreiben ist aber SetAccess das entscheidende.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 94
Anmeldedatum: 15.06.13
Wohnort: ---
Version: 2013b
     Beitrag Verfasst am: 04.03.2015, 21:54     Titel:
  Antworten mit Zitat      
Hallo, danke für die Antwort

also bei mir zeigt er das in der Version 2013b an. Das führte mich dann auch in die Richtung das es nicht ganz richtig sein kann.

Gut danke, denke kann mir das jetzt zusammenreimen.
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.