Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Typen, Records einer Klasse vererben ? (https://www.delphipraxis.net/168491-typen-records-einer-klasse-vererben.html)

Nic2012 24. Mai 2012 11:10

Typen, Records einer Klasse vererben ?
 
In einer Klasse wurde ein Record deklariert und wird innerhalb dieser Basisklasse benutzt.
In der Ableitung dieser Klasse ist in der eig. Anwendung der Record nicht mehr sichtbar. Als Workaround muss ich nun zusatzlich zur Unit mit der abgel. Klasse noch die Unit der Basisklasse hinzufügen.

Wie lässt sich so ein Record der Basisklasse also "weitervererben" ?

Ich benutze ausschl. D7pro.

silver-moon-2000 24. Mai 2012 11:45

AW: Typen, Records einer Klasse vererben ?
 
Zitat:

Zitat von Nic2012 (Beitrag 1167906)
Wie lässt sich so ein Record der Basisklasse also "weitervererben" ?

Kann sein, dass ich Dich falsch verstehe, aber reicht es nicht, wenn Du die Sichtbarkeit des Records auf protected (oder höher) setzt?

Delphi-Quellcode:
type TMyRec = record
//[...]
end;

type TBase = class(TObject)
//[...]
  protected
    FMyRec : TMyRec;
//[...]
end;

Stevie 24. Mai 2012 12:00

AW: Typen, Records einer Klasse vererben ?
 
Zitat:

Zitat von Nic2012 (Beitrag 1167906)
Als Workaround muss ich nun zusatzlich zur Unit mit der abgel. Klasse noch die Unit der Basisklasse hinzufügen.

Musst du doch sowieso. Wie willst du sonst von der Basisklasse erben? :gruebel:

silver-moon-2000 24. Mai 2012 12:08

AW: Typen, Records einer Klasse vererben ?
 
Zitat:

Zitat von Stevie (Beitrag 1167917)
Zitat:

Zitat von Nic2012 (Beitrag 1167906)
Als Workaround muss ich nun zusatzlich zur Unit mit der abgel. Klasse noch die Unit der Basisklasse hinzufügen.

Musst du doch sowieso. Wie willst du sonst von der Basisklasse erben? :gruebel:

Ich denke, er meint, dass er in anderen Units, in denen er nur die abgeleitete Klasse verwendet, auch die Basisklasse in die Uses mit aufnehmen muss

Stevie 24. Mai 2012 12:13

AW: Typen, Records einer Klasse vererben ?
 
Zitat:

Zitat von silver-moon-2000 (Beitrag 1167921)
Zitat:

Zitat von Stevie (Beitrag 1167917)
Zitat:

Zitat von Nic2012 (Beitrag 1167906)
Als Workaround muss ich nun zusatzlich zur Unit mit der abgel. Klasse noch die Unit der Basisklasse hinzufügen.

Musst du doch sowieso. Wie willst du sonst von der Basisklasse erben? :gruebel:

Ich denke, er meint, dass er in anderen Units, in denen er nur die abgeleitete Klasse verwendet, auch die Basisklasse in die Uses mit aufnehmen muss

In diesem Falle stimmt das. Bessere Möglichkeit wäre, die Record Definition in eine eigene Unit auszulagern.

Nic2012 24. Mai 2012 12:26

AW: Typen, Records einer Klasse vererben ?
 
Der Record ist als Typ in der Basisklasse deklariert und wird u.a. als Ruckgabewert einer Funktion (A) innerhalb der Basisklasse benutzt. In meiner Anwendung benutze ich aber nur noch die abgeleitete Klasse. In der Anw.-Implementation möchte ich aber die Funktion(A) benutzen, kann ich aber keine Variable von diesem Record-Typen solange deklarieren, bis ich wieder die Unit mit der Basisklasse und dem Record-Typen hinzufüge.

Den Typen in eine eigne Unit zu verschieben, habe ich auch schon gedacht. Aber ich sehe diesen Record-Typ nur im Kontext der Basisklassen und deren Ableitungen.

shmia 24. Mai 2012 12:37

AW: Typen, Records einer Klasse vererben ?
 
Wo ist das Problem?
Delphi-Quellcode:
unit BasisKlasse;

type
  TMeinRecord = record
    ...
  end;

  TBasisKlasse = class(...)

  end;
Der Record ist für jeden sichtbar, der die Unit BasisKlasse einbindet.

himitsu 24. Mai 2012 12:41

AW: Typen, Records einer Klasse vererben ?
 
Delphi-Quellcode:
unit BasisKlasse;

type
  TBasisKlasse = class(...)
  private type
    TMeinRecord = record
    end;
  private
    FMeinRecord: TMeinRecord;
  public
    ...
  end;
Oder
Delphi-Quellcode:
protected
statt
Delphi-Quellcode:
private
, bzw.
Delphi-Quellcode:
strict protected
oder gar
Delphi-Quellcode:
strict private
.


Man braucht nur mindestens ein Delphi 2006 / TDE

Nic2012 24. Mai 2012 13:04

AW: Typen, Records einer Klasse vererben ?
 
@shmia
Genauso habe ich es in der Basisklasse gemacht, der Compiler kennt in der 3.Unit wo ich Anwendung implementiere und nur die Unit der Ableitung einbinde, den Record-Typen aber nicht.

@himitsu
Habe nur D7 pro

himitsu 24. Mai 2012 13:09

AW: Typen, Records einer Klasse vererben ?
 
*dealer-blick-aufsetz-und-mantel-aufmach*
http://www.delphipraxis.net/144997-s...hi-2006-a.html

shmia 24. Mai 2012 13:17

AW: Typen, Records einer Klasse vererben ?
 
Zitat:

Zitat von Nic2012 (Beitrag 1167939)
Genauso habe ich es in der Basisklasse gemacht, der Compiler kennt in der 3.Unit wo ich Anwendung implementiere und nur die Unit der Ableitung einbinde, den Record-Typen aber nicht.

Dann musst du schlichweg die Unit der Basisklasse in die Uses-Liste aufnehmen.
Dies ist in der VCL ebenfalls so.
Wenn du z.B. die Unit ADODB einbindest, dann musst du fast immer auch die Unit DB einbinden weil du Zugriff auf Datentypen TDataset, TField,... benötigst.

Nic2012 25. Mai 2012 14:43

AW: Typen, Records einer Klasse vererben ?
 
Herzlichen Dank für das rege Feedback.
Ich hab den Record in eine Basis-Unit für alle möglichen Typen und Records verschoben. Diese wird sowieso überall eingebunden, in den Basisklassen wie auch in der späteren Anwendungsentw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 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