AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

inherited

Ein Thema von Highttower · begonnen am 19. Jun 2009 · letzter Beitrag vom 19. Jun 2009
Antwort Antwort
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#1

inherited

  Alt 19. Jun 2009, 08:49
Hallo zusammen,
ich bin von C++ auf Delphi umgestiegen und bin grad auf der Suche nach nem Abstrakt Fehler in einer DLL Datei ... dabei bin ich auf Folgendes Kosntrukt gestoßen:

Delphi-Quellcode:

TKlasse1 = class (TComponent)
private
...
public
constructor Create(AOwner: TComponent);

end;

TKlasse2 = class(TKlasse1)
private
...
public
constructor Create(AOwner: TComponent);

end;

TKlasse3 = class(TKlasse2)
private
...
public
constructor Create(AOwner: TComponent);

end;

TKlasse4 = class(TKlasse3)
private
...
public
constructor Create(AOwner: TComponent);

end;

impelentation

constructor TKlasse4.Create(AOwner: TComponent);
begin
inherited;
...
end;

constructor TKlasse3.Create(AOwner: TComponent);
begin
inherited;
...
end;

constructor TKlasse2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;

constructor TKlasse1.Create(AOwner: TComponent);
begin
....
end;
Kann mir jemand erklären ob es einen unterschied zwischen "inherited;" und "inherited Create(AComponent);" gibt? Und wenn ja welchen? Oder sind das einfach nur Altlasten von Delphi x.y. Achja ich weiß nicht ob das relevant ist ich nutze das RAD-Studio 2007.

Vielen Dank,

Tobi
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: inherited

  Alt 19. Jun 2009, 09:20
inherited; ruft die identische Methode der Superklasse auf.
inherited Create(AComponent); ruft fest Create(AComponent); auf.
In diesem fall sollte es das selbe sein
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

Re: inherited

  Alt 19. Jun 2009, 10:23
Dazu hätte ich jetzt auch mal eine Frage.

Ziemlich oft habe ich Konstrukte wie folgende:

Delphi-Quellcode:
unit Unit1;

interface

type
  TBossClass = class(TObject)
  private
    Fv1: Integer;
  public
    constructor Create(v1: Integer);
  end;

  TChildClass = class(TBossClass)
  private
    Fv1, Fv2: Integer;
  public
    constructor Create(v1, v2: Integer);
  end;

  TSubChildClass = class(TChildClass)
  private
    Fv1, Fv2, Fv3: Integer;
  public
    constructor Create(v1, v2, v3: Integer);
  end;

implementation

constructor TBossClass.Create(v1: Integer);
begin
  Fv1 := v1;
end;

constructor TChildClass.Create(v1, v2: Integer);
begin
  inherited Create(v1);
// inherited; // <-- geht leider nicht ;(
  Fv2 := v2;
end;

constructor TSubChildClass.Create(v1, v2, v3: Integer);
begin
  inherited Create(v1, v2); // Wie ich so Fehler wie Create(v2, v1); hasse! Da sucht man Stunden nach! ._0
// inherited; // <-- geht immer noch nicht ;(
  Fv3 := v3;
end;

end.
Es gibt eine Oberklasse, von der ich immer mehr und immer weiter abgeleite, bis ich dann irgendwann am 'Endobjekt' bin.
Von diesen 'Endobjekten' muss ich dann oftmals ziemlich viele erstellen, da nervt es einfach immer wieder "inherited BluppMethode(MilliardenVonParametern, ....)" aufzurufen. Das ist nachher einfach nur noch ein erheblicher Zeitaufwand und wie ich gemerkt habe schleichen sich da schnell Flüchtigkeitsfehler ein. (Falsche Parameterreihenfolge)

Jetzt die eigentliche Frage:
Gibt es nicht irgendeine Möglichkeit, um die übergeordnete Methode mit deren normalen Parametern aufzurufen, ohne deren Parameter immer neu anzugeben?
(Beim überschreiben der Methoden kommen bei mir immer nur neue Parameter hinten dran)

Edit:
Ansonsten versuch ich mal ein IDE-Plugin zu schreiben.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: inherited

  Alt 19. Jun 2009, 13:34
Hallo,

der Compiler kann doch nicht wissen ob du inherited Create(v1, v2) meinst oder inherited Create(v2, v1) oder auch inherited Create(v1, 25) - das steht dir ja frei, mit oder ohne Hass.

Gruss Reinhard
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: inherited

  Alt 19. Jun 2009, 13:52
Den Constructor nicht mit Parametern überfrachten.
Dafür gibt es Property.
  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 03:22 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