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

Properties über Methode setzen/lesen (get set property)

 

punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 15.06.2016, 14:10     Titel: Properties über Methode setzen/lesen (get set property)
  Antworten mit Zitat      
Ich versuche mir gerade eine Klasse zu bauen, mit der ich einen String mit HTML-Tag erweitert kann, bzw. den Ursprungsstring wieder herstellen kann.

Mein Verständnisproblem liegt noch beim Verändern und Auslesen der 'Properties'.

Code:
classdef HIL_HTMLHandler
  %HIL_HTMLHANDLER Summary of this class goes here
  %   Detailed explanation goes here
 
  properties
    StringWithHTML      = '';
    StringWithoutHTML   = '';
  end
 
  properties (Constant)
    DEF_ColourOptions = struct( 'Red'   , 'red'   ,                     ...
                                'Yellow', 'yellow',                   ...
                                'Black' , 'black' ,                   ...
                                'Grey'  , 'Gainsboro');
  end
 
  properties (Constant, Access = private)
    % HTML-String in Form von
    % <HTML><font color="#FF0000">Red Test</font></HTML>
    DEF_HTML_ColourBeginStart   = '<HTML><font color="';
    DEF_HTML_ColourBeginFinish  = '">';
    DEF_HTML_EndTag             = '</font></HTML>';
   
    % Warn- und Errormeldungen
    DEF_Error_Title = 'Error: Class HIL_HTMLHandler';
  end
 
  properties (Access = private)
    Colour = '';
  end
 
  methods
    function obj = setHtmlColor(obj, Colour)
     
      %% ------------ String mit HTML-FarbTag zusammensetzen ------------
      % Anfangs Tag mit der Farbauswahl zusammensetzen
      HTML_StartTag       = [ obj.DEF_HTML_ColourBeginStart           ...
                              Colour                                ...
                              obj.DEF_HTML_ColourBeginFinish ];
      obj.StringWithHTML  = [ HTML_StartTag                           ...
                              obj.StringWithoutHTML                 ...
                              obj.DEF_HTML_EndTag           ];
      % Farbesetzen
      obj.Colour          = Colour;
      %% -END-------- String mit HTML-FarbTag zusammensetzen ------------
    end
   
    function x = getColour(obj)
      x = obj.Colour;
    end
  end
end


Wenn ich direkt auf 'StringWithHTML' zugreife, wird dies auch ganz klar gespeicher:
Code:
>> a = HIL_HTMLHandler;
>> a.StringWithoutHTML = 'abc';
>> a

a =

  HIL_HTMLHandler with properties:

       StringWithHTML: ''
    StringWithoutHTML: 'abc'
    DEF_ColourOptions: [1x1 struct]


Wenn ich jetzt meine 'setHtmlColour'-Methode verwende, sieht es so aus, als wenn dies auch einwandfrei läuft:
Code:
>> a.setHtmlColor(a.DEF_ColourOptions.Black)

ans =

  HIL_HTMLHandler with properties:

       StringWithHTML: '<HTML><font color="black">abc</font></HTML>'
    StringWithoutHTML: 'abc'
    DEF_ColourOptions: [1x1 struct]


Allerdings sehe ich keine Veränderung der öffentliche 'stringWithHTML'-Property, wenn ich dort direkt darauf zugreife und auch nicht bei meiner privaten 'Colour'-Property, wenn ich die getMethode verwende:

Code:
>> a.StringWithHTML

ans =

     ''


>> a.getColour

ans =

     ''


Wie müsste ich das den eigentlich richtig machen?
'StringWithHTML' soll öffentlich sein, so dass ich von außen lesend und schreibend Zugriff habe und diese auch mit einer Methode verändern kann.

Und 'Colour' soll nur über eine Methode gesetz und gelesen werden können.
Private Nachricht senden Benutzer-Profile anzeigen


punkNgrind
Themenstarter

Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 15.06.2016, 14:45     Titel:
  Antworten mit Zitat      
Mmmh, ist mir jetzt etwas peinlich, aber ich habe die Antwort hier gefunden:
http://www.gomatlab.de/propertie-in.....cht-zugewiesen-t3651.html

Titus hat Folgendes geschrieben:
Hallo,

der grundlegende Unterschied zwischen Eurer beiden Klassen ist, dass Phil eine "Value class" und Joe eine "Handle class" entworfen hat. Das Problem hat nichts mit Zugriffsrechten zu tun.
Bei einer Handle-Class werden Objekte nicht kopiert, sondern nur Referenzen kopiert. Daher funktioniert auch sowas wie
Code:
Obj.methodeDiePropertiesAendert();
% Obj wurde geaendert
 

Eine Value-Klasse funktioniert so nicht, sondern hier muss das geänderte Objekt (welches eine unabhängige Kopie ist!) wieder zugewiesen werden:
Code:

Obj = Obj.methodeDiePropertiesAendert();
 


Ciao,
Titus


Also, wenn die die Klasse als 'Handle-Class' definiere, dann erhalte ich den gewünschten Effekt.

Code:
classdef HIL_HTMLHandler < handle


P.S.: Ich habe wirklich lange im Netz gesucht, bevor ich meine Frage gepostet habe. Embarassed
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.