![]() |
Delphi-Version: 5
Public Variable einer Klasse in Unterklasse verbergen
Hallo,
Ich habe einen bestehenden Quellcode. Es gibt eine Klasse, die eine globale Variable hat, z.B.:
Code:
Es gibt einige Unterklassen, die diese Basisklasse ableiten und diese Variable verwenden. Nun möchte ich eine neue Unterklasse erstellen und die globale Variable für die weiteren Unterklassen (der neuen Unterklasse) verbergen, also z.B. die Variable private machen, damit man auf diese in den Unterklassen nicht mehr zugreifen kann. Gibt es da eine Möglichkeit?
type TBase = class
public VarState : integer; end; Ich kann die Variable nicht einfach durch property ersetzten und die property in der neuen Klasse als private deklarieren, weil die Variable an vielen Stellen beim Funktionsaufruf als var-Parameter übergeben wird. |
AW: Public Variable einer Klasse in Unterklasse verbergen
Nein, das widerspricht krass dem Prinzip von Vererbung. Wenn du eine Oberklasse "Tier" hast und eine Integer-Variable "anzahlAugen". Warum willst du dann beim Meerschweinchen plötzlich verbieten, diese Variable abzufragen?
Du kannst es auch nicht verhindern, denn wenn jemand eine Referenz vom Typ "TBase" hat, dann kann das Programm an der Stelle noch nicht einmal wissen dass du die Property/Variable gerne verdecken würdest. |
AW: Public Variable einer Klasse in Unterklasse verbergen
Ich wüsste nicht wie, aber irgendwie klingt das eher nach einen Kraut-und-Rüben-Klassenkonzept.
Wieviele Unterklassen gibt es von der Basisklasse? Wieviele Unterklassen kommen noch hinzu? Wäre es eine Option, die Basisklasse nur als Feld in der neuen Klasse einzuführen?
Delphi-Quellcode:
type
TBase = class public VarState: Integer; end; TYourNewClass = class private FBase : TBase; end; |
AW: Public Variable einer Klasse in Unterklasse verbergen
Oder wie an vielen Stellen z.B. in der VCL:
Delphi-Quellcode:
In den TCustomXXX-Klassen sind die Properties und Methoden noch protected, die abgeleiteten Klassen erhöhen dann die Sichtbarkeit einfach nur noch selektiv.
type
TCustomBase = class private FVarState: integer; protected property VarState: integer read FVarState write FVarState; end; TBase = class(TCustomBase) public property VarState; end; |
AW: Public Variable einer Klasse in Unterklasse verbergen
Zitat:
Zitat:
|
AW: Public Variable einer Klasse in Unterklasse verbergen
Ja eben. Wenn man bestimmte Methoden oder Eigenschaften nicht veröffentlichen will, leitet man dann halt von der Custom-Klasse ab und lässt die Sichtbarkeit, wie sie ist. Das ist auch die einzige saubere Möglichkeit, da man Sichtbarkeiten eben nur erhöhen und nicht erniedrigen kann.
|
AW: Public Variable einer Klasse in Unterklasse verbergen
Eine weitere Möglichkeit wäre sowas wie:
Delphi-Quellcode:
Dann können deine Unterklassen entweder von der Basis mit- oder ohne VarState ableiten.
TBase = class
end; TVarBase = class(TBase) VarState: Integer; end; Deine neue Unterklasse würde dann eben von TBase ableiten, der Rest von TVarBase. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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