Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff auf Public nur wenn Bedingung erfüllt ist (https://www.delphipraxis.net/150963-zugriff-auf-public-nur-wenn-bedingung-erfuellt-ist.html)

stOrM 1. Mai 2010 16:39


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!

mkinzler 1. Mai 2010 16:43

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
Führe die entsprechenden Eigenschaften erst in den jeweiligen Unterklassen ein.

stOrM 1. Mai 2010 16:46

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.

himitsu 1. Mai 2010 16:46

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
Delphi-Quellcode:
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;
Tja und nun könnte man extern in den Ableger casten, welcher erstellt wurde.
Delphi-Quellcode:
var Engine: TUpdateEngine;

Engine := GetEngine;
Engine.MachWasWelchesÜberallGeht;
if Engine.isWinXP then // oder  if Engine is TWinXP then
  TWinXP(Engine).MachEtwasWelchesNurInWin7Geht;
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.

stOrM 1. Mai 2010 16:49

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
Zitat:

Ansonsten alles in TUpdateEngine renmachen und nur die Zugriffe auf die Property/Funktionen intern unterdrücken (eventuell mit Exceptions)
Hehe nun ist die Verwirrung perfekt :mrgreen:
Irgendwie nicht mein Tag heute :cry:

mkinzler 1. Mai 2010 16:51

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

himitsu 1. Mai 2010 16:53

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
Zitat:

Zitat von stOrM
Hehe nun ist die Verwirrung perfekt :mrgreen:

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;

stOrM 1. Mai 2010 16:57

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von stOrM
Hehe nun ist die Verwirrung perKfekt :mrgreen:

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;

Mein Gott Himi bist du wieder schnell lol hab grad schon roten Kasten bekommen :shock:
Also Cast wäre besser wenn ich das richtig verstehe als die Exceptionmethode?

mkinzler 1. Mai 2010 17:00

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
Zitat:

Also Cast wäre besser wenn ich das richtig verstehe als die Exceptionmethode?
Ja. Weil hier dann immer nur die verfügbaren Methoden sichtbar sind.
Zudem finde ich eine inflationäre Verwendung von Exceptions auch nicht so gut. (Fahrt nach Gehör statt nacht Sicht)

stOrM 1. Mai 2010 17:04

Re: Zugriff auf Public nur wenn Bedingung erfüllt ist
 
[quote="mkinzler"]
Zitat:

Fahrt nach Gehör statt nacht Sicht)
:mrgreen:

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.
Seite 1 von 2  1 2      

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