![]() |
Delphi-Version: 5
W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse
Hallo #,
ich erweitere eine Klasse Base. Dazu habe ich eine neue Klasse von Base abgeleitet. Ein Property muss in meiner Ableitung aber einen anderen Datentyp haben, geht leider nicht anderes. type Base = class; property FontName: AnsiString; end; type Sub = class(Base) property FontName: Integer; end; Warnung W1009 wird angezeigt. Schreibe ich das jetzt so type Sub = class(Base) {$WARNINGS OFF} property FontName: Integer; {$WARNINGS ON} end; ist die Warnung weg. In der OH steht: Die Direktive $WARNINGS kann nur für ganze Prozeduren oder Funktionen verwendet werden. Die Angabe von $WARNINGS ist nicht bei Anweisungsblöcken in einer Prozedur oder Funktion möglich. Was gilt denn jetzt für Properties ?. Noch ein Hinweis: Ich soll einen Wrapper für einfaches Benutzen zweier völlig verschiedener Klassen (Druck, PDF-Export) bauen, ohne dass Code bei deren Benutzung geändert werden soll. Die Druckklasse definiert ein property FontName als Integer, die andere als String. Daran kann ich aber nichts ändern. Heiko |
AW: W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse
Zitat:
![]() Das Problem ist nun dass ein Integer, der auf einen Fontnamen verweisst eben nun mal kein FontName ist. Richtig wäre hier zwei verschiedene Properties einzuführen, die sich gegenseitig beeinflussen:
Delphi-Quellcode:
Über die Funktionen SetFontIndex und GetFontIndex wird nun versucht, einem Index einen Namen zuzuweisen (verlustfrei möglich) und einem Namen einen Index zuzuweisen (nicht immer möglich).
TAdapterBase = class
public property FontIndex:Integer read GetFontIndex write SetFontIndex; property FontName:string read FFontName write FFontName; end; Man benötigt dazu eine kleine Tabelle für die Umwandlung:
Delphi-Quellcode:
Die Basisklasse speichert immer nur den FontName, weil dieser allgemeiner als der FontIndex ist.
TFontIndexRecord = record
Name:string; Index:integer; end; const FontIndexArray:array[0..3] of TFontIndexRecord = ( (Name:'Arial';Index:0), (Name:'Courier New';Index:1), ... ); |
AW: W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse
Zitat:
Abgesehn davon, daß derartige "Verdeckungen" fehleranfällig sind. |
AW: W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse
Hallo,
nehme ich einen Adapter, muss ich sämtliche Methoden dort noch einmal definieren. Es handelt sich hier übrigens um QuickPDF die haben ein "paar" Methoden. Das in FontName kein Integer gespeichert werden soll, ist schon klar, kann ich aber nicht ändern. Im Code steht XX.FontName:= 1; Dieses XX (die alte Druck-Komponente) will ich jetzt über QuickPDF nachbauen. type Sub = class(TQuickPDF) end; Dummerweise hat das TQuickDF ebenfalls ein FontName, der AnsiString ist. Heiko |
AW: W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse
Geht's auf diese Art?
Delphi-Quellcode:
type
TBase = class private FFontName: string; public property FontName: string read FFontName write FFontName; end; TDerived = class(TBase) private function FontNameFromIndex(Value: Integer): string; function GetFontName: Integer; function GetIndexOfFontName(const Value: string): Integer; procedure SetFontName(const Value: Integer); public property FontName: Integer read GetFontName write SetFontName; end; function TDerived.FontNameFromIndex(Value: Integer): string; begin Result := ''; { TODO : mapping Index -> FontName } end; function TDerived.GetFontName: Integer; begin Result := GetIndexOfFontName(inherited FontName); end; function TDerived.GetIndexOfFontName(const Value: string): Integer; begin Result := -1; { TODO : mapping FontName -> index } end; procedure TDerived.SetFontName(const Value: Integer); begin inherited FontName := FontNameFromIndex(Value); end; |
AW: W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse
Hallo,
kann ich gerade nicht prüfen, weil ZU HAUSE ;) Aber ich denke, die Warnung wird immer noch erzeugt. Ich hatte ja eher nach sowas wie reintroduce für Properties gesucht. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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 by Thomas Breitkreuz