AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Inkonsequente Vererbung oder Missverständnis
Thema durchsuchen
Ansicht
Themen-Optionen

Inkonsequente Vererbung oder Missverständnis

Ein Thema von HeikoAdams · begonnen am 3. Jul 2008 · letzter Beitrag vom 4. Jul 2008
Antwort Antwort
Seite 2 von 2     12   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Inkonsequente Vererbung oder Missverständnis

  Alt 3. Jul 2008, 11:11
Hallo Phoenix,

das trifft aber nur auf Funktionen/Prozeduren zu,
bei Klassen kommt es darauf an.

Delphi-Quellcode:
in MySecretUnit.dcu
  TMySecretClass = class
    protected
      procedure Test1;
    public
      procedure Test2;
  end;

in MyUnit.dcu
  TMyUnitClass = class(TMySecretClass)
  end;

in MyUnit2.pas
  TMyUnitClass2 = class(TMyUnitClass)
jetzt klappt natürlich folgendes
Delphi-Quellcode:
var
  MyClass: TMyUnitClass2;
begin
  MyClass:= TMyUnitClass2.Create;
  MyClass.Test1;
  MyClass.Test2;

Wichtig ist natürlich, dass die Methode public oder protected ist.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

Re: Inkonsequente Vererbung oder Missverständnis

  Alt 4. Jul 2008, 11:02
Hallo zusammen,

auch ich bin der Meinung, daß die "Unit-Vererbung" inkonsequent ist.
In uralten Pascal Zeiten war es so, daß uses-Deklarationen im Interface nach "oben" durchgereicht wurden.

z.B.
Delphi-Quellcode:
UNIT Mathe
interface
  procedure Mathe1;
....

UNIT Berechnung;
interface
uses Mathe;

procedure Berechne1;
.......


UNIT MachWas;

..
implementation
uses Berechnung;

procedure machwas1;
begin
  Mathe1;
  Berechne1;
end;
Seit D5(?) funktioniert das nicht mehr, jetzt muß es so aussehen:

Delphi-Quellcode:
UNIT Mathe
interface
  procedure Mathe1;
....

UNIT Berechnung;
interface
uses Mathe;

procedure Berechne1;
.......


UNIT MachWas;

..
implementation
uses Berechnung,Mathe;

procedure Machwas1;
begin
  Mathe1;
  Berechne1;
end;
Obwohl, wenn ich mich recht erinnere, in der Online-Hilfe das "alte" Verhalten als immer noch gültig beschrieben wird.
Oder habe ich da was falsch verstanden?

Gruß
K-H
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Inkonsequente Vererbung oder Missverständnis

  Alt 4. Jul 2008, 11:07
Die OH von Delphi 5 meint:
Zitat:
Die Reihenfolge der Units in der uses-Klausel bestimmt die Reihenfolge der Initialisierung dieser Units (siehe Der initialization-Abschnitt) und wirkt sich auf die Suche des Compilers nach den Bezeichnern aus. Wenn zwei Units eine Variable, eine Konstante, einen Typ, eine Prozedur oder eine Funktion mit identischem Namen deklarieren, verwendet der Compiler die Deklaration der in der uses-Klausel zuletzt angegeben Unit. Wollen Sie auf den Bezeichner in einer anderen Unit zugreifen, müssen Sie den vollständigen Bezeichnernamen angeben: Unitname.Bezeichner.

Eine uses-Klausel muß nur die Units enthalten, die direkt vom Programm bzw. von der Unit verwendet werden, in dem bzw. der die uses-Klausel steht. Referenziert beispielsweise Unit A Konstanten, Typen, Variablen, Prozeduren oder Funktionen, die in Unit B deklariert sind, muß die Unit B explizit in der uses-Klausel von Unit A angegeben werden. Referenziert B wiederum Bezeichner aus Unit C, ist Unit A indirekt von Unit C abhängig. In diesem Fall muß Unit C nicht in einer uses-Klausel in Unit A angegeben werden. Der Compiler benötigt jedoch Zugriff auf die Units B und C, während Unit A verarbeitet wird.

Das folgende Beispiel illustriert diese indirekte Abhängigkeit:

Delphi-Quellcode:
program Prog;

uses Unit2;
const a = b;
...
unit Unit2;
interface
uses Unit1;
const b = c;
...
unit Unit1;
interface
const c = 1;
...
Hier hängt das Programm Prog direkt von Unit2 ab, die wiederum direkt von Unit1 abhängig ist. Prog ist also indirekt von Unit1 abhängig. Da Unit1 nicht in der uses-Klausel von Prog angeben ist, sind die in Unit1 deklarierten Bezeichner für Prog nicht verfügbar.
Damit ein Client-Modul compiliert werden kann, muß der Compiler Zugriff auf alle Units haben, von denen der Client direkt oder indirekt abhängt. Sofern der Quelltext dieser Units nicht geändert wurde, benötigt der Compiler nur die DCU-Dateien, nicht jedoch die Quelltextdateien (PAS).

Werden im interface-Abschnitt einer Unit Änderungen vorgenommen, müssen die von dieser Unit abhängigen Units neu compiliert werden. Werden die Änderungen dagegen nur im implementation- oder einem anderen Abschnitt einer Unit vorgenommen, müssen die abhängigen Units nicht neu compiliert werden. Der Compiler überwacht diese Abhängigkeiten und nimmt Neucompilierungen nur vor, wenn dies erforderlich ist.
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 p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#14

Re: Inkonsequente Vererbung oder Missverständnis

  Alt 4. Jul 2008, 14:21
Danke!

Wer lesen kann ist klar im Vorteil!

Gruß
K-H
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:55 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