Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Klassen vererben in anderer Unit (https://www.delphipraxis.net/201985-klassen-vererben-anderer-unit.html)

JustARandomUser 16. Sep 2019 17:15

Klassen vererben in anderer Unit
 
Moin,

Habe erst vor 3- 5 Wochen neu mit Delphi (Lazarus) in der Schule angefangen und möchte nun eine Klasse vererben.

Wenn ich das innerhalb der "Haupt"- Klasse mache ist das auch gar kein Problem, allerdings ist so der Text viel zu unübersichtlich (meiner Meinung nach). Bin daher zum naheliegenden Schluss gekommen für eine neue Klasse auch eine neue Unit zu erstellen. Allerdings sagt er mir in der neu erstellten Unit nun bei type T*VererbteKlasse = class(T*Hauptklasse) und gibt folgenden Fehlercode aus Error: Identifier not found "T*Hauptklasse".

Habe im Internet nichts dazu gefunden, ist es also möglich klassen in einer anderen Unit zu vererben?
Falls ja, was mache ich falsch?

Lg JustARandomUser

bcvs 16. Sep 2019 17:21

AW: Klassen vererben in anderer Unit
 
Natürlich ist das möglich und oft auch sinnvoll, wie du ja schon selbst festgestellt hast.

Steht die unit mit deiner T*Hauptklasse im Uses der Unit deiner T*VererbteKlasse?

Schokohase 16. Sep 2019 17:26

AW: Klassen vererben in anderer Unit
 
Delphi-Quellcode:
unit Models.Haupt;

interface

type
  THauptKlasse = class
  end;

implementation

end.
Delphi-Quellcode:
unit Models.Unter;

interface

uses
  Models.Haupt;

type
  TUnterKlasse = class(THauptKlasse)
  end;

implementation

end.

JustARandomUser 16. Sep 2019 18:27

AW: Klassen vererben in anderer Unit
 
Ok vielen Dank für die schnellen Antworten. War ein sehr dummer Fehler! :thumb:

Hab es tatsächlich falsch herum gemacht und die OberKlasse auf Unterklasse zugreifen und nicht die Unterklasse auf die Oberklasse zugreifen lassen.:roll:

Redeemer 16. Sep 2019 21:08

AW: Klassen vererben in anderer Unit
 
VIelleicht noch wichtig zu beachten: Beim Erben einer Hauptklasse in einer anderen Unit können nur protected- und public-Methoden benutzt und überschrieben werden, während in derselben Unit auch private-Methoden gehen (außer Methoden, deren Sichtbarkeit zusätzlich strict ist).

freimatz 17. Sep 2019 12:03

AW: Klassen vererben in anderer Unit
 
Eine Lösung haste ja schon. Was ich mir nicht verkneifen kann:
Zitat:

Zitat von JustARandomUser (Beitrag 1446437)
..., allerdings ist so der Text viel zu unübersichtlich (meiner Meinung nach). Bin daher zum naheliegenden Schluss gekommen ...

Gratuliere! Du bist auf dem Weg zu einem guten Softwareentwickler.:thumb: (Nur zur Sicherheit: keine Ironie)

Schokohase 17. Sep 2019 12:42

AW: Klassen vererben in anderer Unit
 
Zitat:

Zitat von freimatz (Beitrag 1446601)
Eine Lösung haste ja schon. Was ich mir nicht verkneifen kann:
Zitat:

Zitat von JustARandomUser (Beitrag 1446437)
..., allerdings ist so der Text viel zu unübersichtlich (meiner Meinung nach). Bin daher zum naheliegenden Schluss gekommen ...

Gratuliere! Du bist auf dem Weg zu einem guten Softwareentwickler.:thumb: (Nur zur Sicherheit: keine Ironie)

Speziell bei Delphi ist dieses Aufteilen (1 Klasse = 1 Datei) nicht immer sinnvoll, denn jede Datei ist eine Unit ist ein Namespace.
Zitat:

Zitat von Redeemer (Beitrag 1446476)
VIelleicht noch wichtig zu beachten: Beim Erben einer Hauptklasse in einer anderen Unit können nur protected- und public-Methoden benutzt und überschrieben werden, während in derselben Unit auch private-Methoden gehen (außer Methoden, deren Sichtbarkeit zusätzlich strict ist).

In anderen Sprachen ist das (mit den Namespaces) anders gelöst und dort gehört es eher zum guten Ton pro Klasse eine (oder sogar mehrere) Datei(en) zu erstellen.

freimatz 17. Sep 2019 13:11

AW: Klassen vererben in anderer Unit
 
Ja schon. Mir ging es hier darum, dass er selber gemerkt hat dass es "unübersichtlich" wurde. Das finde ich für einen Anfänger schon bemerkenswert gut. (Manche merken es auch nach 25 Jahren nicht :evil:)


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