AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [Methoden überschreiben] +Parameter +erneut überschreiben
Thema durchsuchen
Ansicht
Themen-Optionen

[Methoden überschreiben] +Parameter +erneut überschreiben

Ein Thema von Martin K · begonnen am 15. Feb 2007 · letzter Beitrag vom 16. Feb 2007
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

[Methoden überschreiben] +Parameter +erneut überschreiben

  Alt 15. Feb 2007, 04:42
Moin,

ich habe folgendes Problem:
1. ich leite von einer Klasse ab, nennen wir die abgeleitete Klasse mal Tclass1
2. ich will eine Methode (den Konstruktor) überschrieben, aber mit zusätzlichen Parametern
dazu verwende ich normalerweise die Direktive reintroduce
3. nun wird von Tclass1 erneut abgeleitet: Tclass2
4. in Tclass2 soll der Konstruktor wieder überschrieben werden (aber mit den selben Parametern wie in Tclass1)
dazu verwende ich normalerweise override, allerdings klappt das nicht mehr:
Zitat:
E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden
Okay, muss also ein virtual hinter den Konstruktor von Tclass1.
virtual klappt allerdings nicht zusammen mit reintroduce, also muss reintroduce wieder weg.
Steht also nur virtual dahinter, es kommt zur Warnmeldung:
Zitat:
W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TCustomControl'
Hier nochmal als Code:
Delphi-Quellcode:
type
  Tclass1 = class(TCustomControl)
  public
    constructor Create(AOwner: TComponent; Test: String); reintroduce;
  end;

  Tclass2 = class(Tclass1)
  public
    constructor Create(AOwner: TComponent; Test: String); override; // <-- klappt nicht!
  end;
Delphi-Quellcode:
type
  Tclass1 = class(TCustomControl)
  public
    constructor Create(AOwner: TComponent; Test: String); virtual; // <-- Warnmeldung
  end;

  Tclass2 = class(Tclass1)
  public
    constructor Create(AOwner: TComponent; Test: String); override;
  end;
Meine Frage:
Was müsste richtiger Weise hinter dem Konstruktor für eine Direktive stehen?
Oder soll ich die Warnmeldung einfach ignorieren?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: [Methoden überschreiben] +Parameter +erneut überschreibe

  Alt 15. Feb 2007, 05:12
Und der Nächste, der das Rad neu erfinden will. Wieso hantiert ihr nur dauernd rum mit dem Custom-Kram ? Was soll denn der Zweck des ganzen sein ? Eine Komponente "erfinden" , die es noch in keiner in etwa vergleichbaren Weise gibt, oder was ? So dass man tatsächlich bei TControl, also quasi beim Urknall ansetzen muss ? Bei OOP gehts hauptsächlich um Vererbung und das wird kaum oder falsch genutzt. Genauso weng, wie "inherited". Man setzt die relevanten Felder vom Vorgänger durch den Aufruf von inherited . Ab da gehts dann weiter.

Guck mir den VCL-Source jetzt nicht an, weil das TControl.Create sicherlich keinen Parameter "Test : string" hat. Muss tatsächlich die Parameterliste einer Methode geändert werden, was man nach Möglichkeit vermeiden sollte, dann ist das mit "overload" zu bewerkstelligen. Reintroduce ist da ziemlich uninteressant.
Gruß
Hansa
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#3

Re: [Methoden überschreiben] +Parameter +erneut überschreibe

  Alt 15. Feb 2007, 07:36
Hallol Martin K!

Deklariere wie folgt:
Delphi-Quellcode:
  Tclass1 = class(TCustomControl)
  public
    constructor Create(AOwner: TComponent; Test: String); reintroduce; virtual;
  end;

  Tclass2 = class(Tclass1)
  public
    constructor Create(AOwner: TComponent; Test: String); override;
  end;
Zitat:
virtual klappt allerdings nicht zusammen mit reintroduce
doch, tut es. Du mußt es nur in der richtigen Reihenfolge machen.

Gruß
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [Methoden überschreiben] +Parameter +erneut überschreibe

  Alt 15. Feb 2007, 18:03
Zitat von onlinekater:
Zitat:
virtual klappt allerdings nicht zusammen mit reintroduce
doch, tut es. Du mußt es nur in der richtigen Reihenfolge machen.

Gruß
Danke, so klappt's
Da hatte ich wohl die falsche Reihenfolge

@Hansa:
Ich will nur eine Komponente, die mir einfach ein Bild anzeigen kann, ähnlich wie TImage.
Sie soll allerdings auch den Fokus erhalten können, deshalb schien mir das Ableiten von TCustomControl genau richtig
Mit overload erhalte ich übrigens auch die oben genannte Warnmeldung.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: [Methoden überschreiben] +Parameter +erneut überschreibe

  Alt 16. Feb 2007, 02:29
Zitat von Martin K:
@Hansa:
...
Mit overload erhalte ich übrigens auch die oben genannte Warnmeldung.
Reintroduce ist nur dazu da, diese Warnmeldung zu unterdrücken. -> F1 Ansonsten ist es ohne Bedeutung. Wer viele Warnungen erhält, der macht aber auch IMHO irgendwas falsch.
Gruß
Hansa
  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 23:27 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