Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Type Ableitung oder Parametereinschraenkung??? (https://www.delphipraxis.net/189546-type-ableitung-oder-parametereinschraenkung.html)

DrTosh 23. Jun 2016 09:49

Delphi-Version: 5

Type Ableitung oder Parametereinschraenkung???
 
TType = (TT1, TT2, TT3, TT4, TT5, TT6, TT7);
TTypeNormal = (TT1, TT2, TT3, TT4, TT5, TT6); // Teilmenge von TType
TTypeSpezial = (TT5, TT6, TT7); // Teilmenge von TType

TNormal = class(TObject)
public
FType: TType;
Constructor Create(lType: TType);// nur TTypeNormal zulaessig
end;
TSpezial = class(TNormal)
public
Constructor Create(lType: TType);// nur TTypeSpezial zulaessig
end;

Constructor TNormal.Create([TT1, TT2, TT3, TT4, TT5, TT6]);// nur TTypeNormal zulaessig

Constructor TSepzial.Create([TT5, TT6, TT7]);// nur TTypeSpezial zulaessig


Ich weiss, das der Code oben Syntaktisch falsch ist.
Er ist nur fuer die Darstellung, was ich erreichen moechte.
Ich habe einen Type und zwei Teilmengen von diesem.
In dem Constructor moechte ich aber immer nur die passenden Typen als Auswahlmoeglichkeit anbieten.
Gibt es eine Moeglichkeit, wie ich das realisieren kann?

MfG DrTosh

Uwe Raabe 23. Jun 2016 10:33

AW: Type Ableitung oder Parametereinschraenkung???
 
So vielleicht?
Delphi-Quellcode:
type
  TType = (TT1, TT2, TT3, TT4, TT5, TT6, TT7);
  TTypeNormal = TT1 .. TT6; // Teilmenge von TType
  TTypeSpezial = TT5 .. TT7; // Teilmenge von TType

  TNormal = class(TObject)
  public
    FType: TType;
    Constructor Create(lType: TTypeNormal); // nur TTypeNormal zulaessig
  end;

  TSpezial = class(TNormal)
  public
    Constructor Create(lType: TTypeSpezial); // nur TTypeSpezial zulaessig
  end;

Constructor TNormal.Create(lType: TTypeNormal); // nur TTypeNormal zulaessig
begin

end;

Constructor TSpezial.Create(lType: TTypeSpezial); // nur TTypeSpezial zulaessig
begin

end;

DrTosh 28. Jun 2016 10:35

AW: Type Ableitung oder Parametereinschraenkung???
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1340872)
Delphi-Quellcode:
type
  TType = (TT1, TT2, TT3, TT4, TT5, TT6, TT7);
  TTypeNormal = TT1 .. TT6; // Teilmenge von TType
  TTypeSpezial = TT5 .. TT7; // Teilmenge von TType

genau so funktioniert es.
Vielen Dank.

MfG DrTosh

himitsu 28. Jun 2016 12:14

AW: Type Ableitung oder Parametereinschraenkung???
 
Zitat:

Zitat von DrTosh (Beitrag 1341338)
Delphi-Quellcode:
type
  TType = (TT1, TT2, TT3, TT4, TT5, TT6, TT7);
  TTypeNormal = (TT1, TT2, TT3, TT4, TT5, TT6); // Teilmenge von TType
  TTypeSpezial = (TT5, TT6, TT7); // Teilmenge von TType

Sowas geht ohne $SCOPEDENUMS garnicht -> Doppelte Bezeichner.

Denn so definiert sind das keine Teilmengen, sondern eigenständige Enums
und dort ist TTypeSpezial.TT6=1, TTypeNormal.TT6=5 und TType.TT6=5.

Ach ja, auch wenn du das in den Parametertypen begrenzt, dann betrifft dfas nur die direkte Übergabe, aber bei Übergabe in einer Vaiable, wird das nicht geprüft,
was du dann notfalls selber zur Laufzeit nochmal prüfen müsstest.

Sir Rufo 28. Jun 2016 12:23

AW: Type Ableitung oder Parametereinschraenkung???
 
Ich denke das war ihm durchaus bewusst:
Zitat:

Zitat von DrTosh (Beitrag 1340860)
Ich weiss, das der Code oben Syntaktisch falsch ist.
Er ist nur fuer die Darstellung, was ich erreichen moechte.
[…]
Gibt es eine Moeglichkeit, wie ich das realisieren kann?


bernau 28. Jun 2016 12:31

AW: Type Ableitung oder Parametereinschraenkung???
 
Ich arbeite bei so etwas gerne mit Sets.

Übergeben wird dann mit dem Set die Teimenge.

Delphi-Quellcode:
type
  TType = (TT1, TT2, TT3, TT4, TT5, TT6, TT7);
  TTypeSet = set of TType;

const
  TTypeNormal = [TT1 .. TT6];
  TTypeSpezial = [TT5 .. TT7];


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 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