AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Public Variable einer Klasse in Unterklasse verbergen
Thema durchsuchen
Ansicht
Themen-Optionen

Public Variable einer Klasse in Unterklasse verbergen

Ein Thema von Jimmie · begonnen am 27. Nov 2015 · letzter Beitrag vom 27. Nov 2015
Antwort Antwort
Jimmie

Registriert seit: 25. Nov 2015
5 Beiträge
 
#1

Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 13:54
Delphi-Version: 5
Hallo,

Ich habe einen bestehenden Quellcode. Es gibt eine Klasse, die eine globale Variable hat, z.B.:

Code:
type TBase = class
  public
    VarState : integer;
end;
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?
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 14:02
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 14:04
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

AW: Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 14:18
Oder wie an vielen Stellen z.B. in der VCL:
Delphi-Quellcode:
type
  TCustomBase = class
  private
    FVarState: integer;
  protected
    property VarState: integer read FVarState write FVarState;
  end;

  TBase = class(TCustomBase)
  public
    property VarState;
  end;
In den TCustomXXX-Klassen sind die Properties und Methoden noch protected, die abgeleiteten Klassen erhöhen dann die Sichtbarkeit einfach nur noch selektiv.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 15:37
In den TCustomXXX-Klassen sind die Properties und Methoden noch protected, die abgeleiteten Klassen erhöhen dann die Sichtbarkeit einfach nur noch selektiv.
genau - nur will er halt genau das Gegenteil. und das spricht für ein zumindest fragwürdiges Klassenmodell.

Wäre es eine Option, die Basisklasse nur als Feld in der neuen Klasse einzuführen?
sehe ich auch als einzig sinnvolle Möglichkeit das umzusetzen..
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

AW: Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 16:05
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Public Variable einer Klasse in Unterklasse verbergen

  Alt 27. Nov 2015, 16:24
Eine weitere Möglichkeit wäre sowas wie:

Delphi-Quellcode:
TBase = class

end;

TVarBase = class(TBase)
  VarState: Integer;
end;
Dann können deine Unterklassen entweder von der Basis mit- oder ohne VarState ableiten.
Deine neue Unterklasse würde dann eben von TBase ableiten, der Rest von TVarBase.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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