Hi,
1. würde ich ein Interface erstellen, in dem alle gemeinsamen Funktionen/Prozeduren/Properties der 3 Betriebssystemklassen definiert werden.
2. Das Gleiche dann für die 3 Klassen separat.
3. Den Interfaces eine
GUID verpassen dann kannst du die Supports Funktion benutzen. !Wichtig!
4. Die 3 Klassen dann vom gemeinsamen Interface und dem spezialisierten ableiten, dann müssen die F./P./P. in den 3 Klassen auch vorhanden sein, sonst komiliert er erst garnicht.
5. In den 3 Klassen nicht private/protected verwenden, sondern strict private/strict protected, dann sind diese auch in der
Unit private/protected.
So noch ein wenig Code:
Delphi-Quellcode:
IWindows =
interface(IInterface)
['
{9cd3bd90-e18a-4e4f-a720-93b515181025}']
// von [url]www.guidgenerator.com[/url]
function Add(sum1, sum2: Integer): Integer;
// als Beispiele
function Sub(sub1, sub2: Integer): Integer;
end;
IWin7 =
interface(IInterface)
['
{e71d5c68-08ae-4f7c-8239-fd058c77f7b2}']
function Mul(mul1, mul2: Integer): Integer;
end;
IWinXP =
interface(IInterface)
['
{788e59bc-3f7a-4456-8951-8cce2abf1a71}']
function Div(div1, div2: Integer): Integer;
end;
TUpdateEngine =
class(IWindows)
function Add(sum1, sum2: Integer): Integer;
function Sub(sub1, sub2: Integer): Integer;
...
end;
TWin7 =
class(TUpdateEngine, IWin7)
function Mul(mul1, mul2: Integer): Integer;
...
end;
TWinXP =
class(TUpdateEngine, IWinXP)
function Div(div1, div2: Integer): Integer;
...
end;
procedure ToWas;
var
Engine : TUpdateEngine;
// oder IWindows wenn die Var. nicht inizialisiert werden muß
I7 : IWin7;
IXP : IWinXP;
begin
Engine := GetEngine;
Engine.Add();
if Supports(Engine, IWin7, I7)
then
I7.Mul();
if Supports(Engine, IWinXP, IXP)
then
IXP.
Div();
end;
Mit der Methode bist du wirklich
OOP und auch sehr sauber.