![]() |
NOT funktioniert nicht bei Klasse mit boolean default property
Hallo,
ich hab eine Klasse "TMyClass" mit der ich mehrere properties vereine, eine davon ist ein boolean und zugleich die default property. folgendes funktioniert:
Code:
aber dieses
var MyVar: TMyClass
... ... if MyVar = true then ...
Code:
oder
if MyVar then
Code:
bringt die Fehlermeldung dass der Typ vom Boolean sein sollte, aber vom Typ TMyClass ist.
if not MyVar then
Um zumindest das NOT verwenden zu können, habe ich eine Operatorüberladung probiert:
Code:
aber ohne Wirkung. Fehlermeldung bleibt die gleiche.
class operator TMyClass.LogicalNot (a:TMyClass): TMyClass;
begin Result.OldVal := not a.OldVal; // Default Wert invertieren end; Natürlich kann ich überall das "= true" oder "= false" hinzufügen, aber ich würde es gerne eleganter lösen (und dabei etwas dazu lernen). |
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Und wo hast du deklariert, daß MyVar ein Boolean sein soll? Soweit ich sehen kann, hast du MyVar quasi als Pointer deklariert, der auf den Speicherbereich einer noch zu erzeugenden Instanz von TMyClass zeigt. Wenn du oben auf True prüfst, machst du lediglich einen Integervergleich: Wenn MyVar = 1. Analog dazu erhältst du logischerweise eine Fehlermeldung, wenn du versuchst, einen Nicht-Boolean-Ausdruck als Boolean-Ausdruck zu verwenden. MyVar ist keine Boolean-Variable, wogegen der Ausdruck (MyVar = 1) einen Boolean-Ausdruck darstellt: er ist nämlich entweder wahr oder falsch.
|
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Wir halt eine kleine Macke des Compilers sein.
Du solltest aber auch mit
Delphi-Quellcode:
zurecht kommen.
if not MyVar.<BoolVarible> then
|
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Zitat:
Ich halte das für einen Designfehler, der die Lesbarkeit des Codes drastisch verschlechtert. Ich kann mir gerade noch eine Array-Property als default property vorstellen, aber sonst nicht.
Delphi-Quellcode:
if MyClass.IsSomeCondition then
// ist wesentlich lesbarer als if MyClass then |
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Versuch mal so:
Delphi-Quellcode:
class operator TMyClass.LogicalNot (a:TMyClass): Boolean;
begin Result := not a.OldVal; // Default Wert invertieren end; |
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Zitat:
|
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Zitat:
An deinen bisherigen Ausführungen gibt es ein paar Ungereimtheiten. So hat eine Klasse ( ![]() |
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Zitat:
Ich dachte gelesen zu haben dass Operator-Überladungen auch bei Klassen anwendbar sind, allerdings habe ich nur Beispiele für Records gefunden. Lag damit wohl zum zweiten mal daneben. Delphi Version ist XE3 Pro, aber das ändert nun wohl auch nix mehr. Danke trotzdem |
AW: NOT funktioniert nicht bei Klasse mit boolean default property
class operators für Klassen soll mit XE4 kommen :)
Es gibt keine Beschränkung bei default properties aber der Zugriff gestaltet sich eben schwierig ;) |
AW: NOT funktioniert nicht bei Klasse mit boolean default property
Zitat:
Delphi-Quellcode:
Der Compiler erkennt bei MyClass[0], anhand der eckigen Klammern, daß hier die Standard-Array-Eigenschaft gemeint ist.
type
TMyClass = class private function GetMyProp(Index: Integer): Boolean; procedure SetMyProp(Index: Integer; const Value: Boolean); public property MyProp[Index: Integer]: Boolean read GetMyProp write SetMyProp; default; end; Das geht nicht:
Delphi-Quellcode:
Das geht zwar wieder:
type
TMyClass = class private FMyProp: Boolean; public property MyProp: Boolean read FMyProp write FMyProp; default; end;
Delphi-Quellcode:
hat aber eine vollkommen andere Bedeutung.
type
TMyClass = class private FMyProp: Boolean; public property MyProp: Boolean read FMyProp write FMyProp default true; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz