![]() |
Kann Klasse von Record erben?
Hi, ich würde gerne TRect als Grundgerüst für eine neue Klasse verwenden. Geht das irgendwie?
Auf dem herkömmlichen Weg hab ich keinen Erfolg:
Delphi-Quellcode:
type TMyRect = class(TRect)
... end; |
Re: Kann Klasse von Record erben?
Da TRect ein Record ist kannst du nicht davon ableiten. Aber du könntest den Typ TRect überschreiben.
Fragt sich nur was das soll? Sinnvoll ist das auf jedenfall nicht. |
Re: Kann Klasse von Record erben?
Am einfachsten erstellst du dir eine Klasse TMyRect mit den Feldern von TRect und kannst wunderbar damit arbeiten und auch davon ableiten.
|
Re: Kann Klasse von Record erben?
Was willst du denn erreichen?
Also ableiten geht nicht, da Records und Objekte etwas unterschiedlich sind, auch wenn Objekte in Wirklichkeit ja auch Record-Pointer darstellen, also Pointer (die Objektvariable) welche auf einen record zeigen. Allerdings mit ein paar zusätzlichen "unsichtbaren" Feldern vor den eigenen "Daten" und noch ein paar mehr RTTI-Records/Arrays im Hinterdrund. Seit Delphi 2006 / Turbo Delphi kann man Records auch mit Funktionen, Prozeduren und Properties ausstatten. (es bleibt aber von der Speicherverwaltung her ein Record) |
Re: Kann Klasse von Record erben?
Ich will eine TRect-Klasse haben weil ich diese, falls sie nicht gefüllt ist auf = nil überprüfen kann, bzw ihr einen weiteren Parameter verpassen kann der sagt ob sie initialisiert ist oder nicht.
Leider ist das mit dem "kopieren" aus dem Record nicht so leicht. Folgendes bringt eine Fehlermeldung "end erwarter aber case gefunden"
Delphi-Quellcode:
type TjfRect = class
case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end; |
Re: Kann Klasse von Record erben?
Zitat:
Delphi-Quellcode:
TjfRect = class
private FLeft, FTop, FRight, FBottom: Integer; public property Left: Integer read FLeft write FLeft; property Top: Integer read FTop write FTop; property Right: Integer read FRight write FRight; property Bottom: Integer read FBottom write FBottom; property TopLeft: TPoint read GetTopLeft write SetTopLeft; property BottomRight: TPoint read GetBottomRight write SetBottomRight; end; function TjfRect.GetBottomRight: TPoint; begin Result := Point(FRight,FBottom); end; function TjfRect.GetTopLeft: TPoint; begin Result := Point(FLeft,FTop); end; procedure TjfRect.SetBottomRight(const Value: TPoint); begin FRight := Value.X; FBottom := Value.Y; end; procedure TjfRect.SetTopLeft(const Value: TPoint); begin FLeft := Value.X; FTop := Value.Y; end; |
Re: Kann Klasse von Record erben?
warum nimmst du nicht einfach PRect?
|
Re: Kann Klasse von Record erben?
Es... es gibt ein PRect? :snowball:
|
Re: Kann Klasse von Record erben?
ähhhh ja :lol:
ansonsten ginge noch sowas:
Delphi-Quellcode:
Wobei ich hier von der Speicherverwaltung her eher ein Interface statt des interen PRect verwenden
type
TMyRefRect = record private Data: PRect; function GetLeft: LongInt; procedure SetLeft (i: LongInt); // hier dafür sorgen, function GetTop: LongInt; procedure SetTop (i: LongInt); // das in Data Speicher function GetRight: LongInt; procedure SetRight (i: LongInt); // reserviert ist function GetBottom: LongInt; procedure SetBottom(i: LongInt); // und dann eventuell function GetTopLeft: PPoint; // die empfangenen function GetBottomRight: PPoint; // Daten eintragen public class operator Implicit( Rec: TMyRefRect): TRect; class operator Implicit(Const Data: TRect): TMyRefRect; property Left: LongInt read GetLeft write SetLeft; property Top: LongInt read GetTop write SetTop; property Right: LongInt read GetRight write SetRight; property Bottom: LongInt read GetBottom write SetBottom; property TopLeft: PPoint read GetTopLeft; property BottomRight: PPoint read GetBottomRight; Procedure Clear; Function isSet: Boolean; end; oder einen String (also einfach irgendwas mit Referenzzählung) mißbrauchen würde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 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