Zugriff auf Public nur wenn Bedingung erfüllt ist
Hallo,
irgendwie hab ich grad nen Knoten im Kopf. Ich würde gerne folgendes erreichen, falls irgendwie sauber machbar: Sagen wir mal es gibt eine Basisklasse: TUpdateEngine und mehrere weitere Klassen abhängig vom Betriebssystem z.b. TWin7, TWinVista, TWinXP Die Basisklasse TUpdateEngine soll beim Create prüfen, um welches Zielbetriebssystem es sich handelt. Wenn das erledigt ist, sollen nur die Funktionen und Proceduren aus dem Publicteil von aussen ansprechbar sein, die auch zum Zielbetriebssystem passen. Diese Functionen und Proceduren möchte ich gerne in die Klassen TWin7 usw. auslagern. Mir ist nicht klar, wie ich die Klassen aufbauen muss, damit dies möglich ist, sollte es überhaupt möglich sein? Zu mal ich gerne alles in einer Unit unterbringen würde. Vielleicht kann mir jemand mal auf die Sprünge helfen... Viele Grüsse s! |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Führe die entsprechenden Eigenschaften erst in den jeweiligen Unterklassen ein.
|
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Ok,
Aber wie komm ich von der TUpdateEngine nach z.b. TWin7 mit den Functionen für Win7 nach dem ermitteln des Betriebssystems in TUpdateEngine? Das ist mir nicht klar. |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Delphi-Quellcode:
Tja und nun könnte man extern in den Ableger casten, welcher erstellt wurde.
type
TWin7 = class(TUpdateEngine) ... end; TWinVista = class(TUpdateEngine) ... end; TWinXP = class(TUpdateEngine) ... end; function GetEngine(): TUpdateEngine; begin if TheSystem = '7' then Result := TWin7.Create else if TheSystem = 'Vista' then Result := TWinVista.Create else if TheSystem = 'XP' then Result := TWinXP.Create else Fehler; end;
Delphi-Quellcode:
Ansonsten alles in TUpdateEngine reinmachen und nur die Zugriffe auf die Property/Funktionen intern unterdrücken (eventuell mit Exceptions), welche im aktuellen System nicht verfügbar sind.
var Engine: TUpdateEngine;
Engine := GetEngine; Engine.MachWasWelchesÜberallGeht; if Engine.isWinXP then // oder if Engine is TWinXP then TWinXP(Engine).MachEtwasWelchesNurInWin7Geht; |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Zitat:
Irgendwie nicht mein Tag heute :cry: |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Das geht z.B. bei Methoden, wenn du die Abfrage in disen machst und beim falschen OS eine Exception auslöst.
Besser ist aber die andere Alternativ, da sie dem Prinzip der OOP folgt |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Zitat:
Delphi-Quellcode:
TUpdateEngine = class
property isWin7: Boolean ...; procedure NurFürWin7; procedure NurFürWin7oderXP; end; procedure TUpdateEngine.NurFürWin7; begin if not isWin7 then raise Exception.Create('ist nicht erlaubst'); ... end; procedure TUpdateEngine.NurFürWin7oderXP; begin if not (isWin7 or isWinXP) then raise Exception.Create('ist nicht erlaubst'); ... end; |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Zitat:
Also Cast wäre besser wenn ich das richtig verstehe als die Exceptionmethode? |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
Zitat:
Zudem finde ich eine inflationäre Verwendung von Exceptions auch nicht so gut. (Fahrt nach Gehör statt nacht Sicht) |
Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
[quote="mkinzler"]
Zitat:
Ok da ist was dran hehe, dann lass ich mir mal ne Badewanne mit Kaffee ein und leg mal los! Vielen Dank euch beiden! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz