Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Konstruktor überladen

41 views
Skip to first unread message

Christian Novak

unread,
Apr 6, 2010, 10:57:16 PM4/6/10
to

TLWs = class(TComponent)
private
...
public
constructor Create(AOwner: TComponent); overload; override; [1]
constructor Create(AOwner: TComponent; JustthisLW: TLW); overload;
[2]
constructor Create(AOwner: TComponent; JustThisPfad: string);
overload; [3]

[2] + [3] ergeben die Warnung 'Methode 'Create' verbirgt virtuelle
Methode vom Basistyp'
- 'override' dranh�ngen funkt nicht. klaro.
- 'virtual' dranh�ngen �ndert nix an der Warnung.
- 'reintroduce' f�llt weg, da ich 'inherited Create' ben�tige

So l�ufts:
constructor Create(AOwner: TComponent); override;
constructor CreatePartiell(AOwner: TComponent; JustthisLW: TLW);
overload;
constructor CreatePartiell(AOwner: TComponent; JustThisPfad:
string); overload;

... und 'inherited Create' kann ich hier auch �berall anwenden ;-)

Frage: ist doch ok, oda?
If ja, dann reicht mir das f�r diese Anwendung, trotzdem h�tt ich f�r
andere F�lle (selten aber doch) mal gern mehrere _gleichnamige_
�berladene Konstruktoren. Also wie w�re oberster Versuch
richtiggestellt? Hab leider kein brauchbares Beispiel gefunden :-(


herzlichen Dank
novi


Arno Garrels

unread,
Apr 7, 2010, 2:58:28 AM4/7/10
to
Christian Novak wrote:
> TLWs = class(TComponent)
> private
> ...
> public
> constructor Create(AOwner: TComponent); overload; override; [1]
> constructor Create(AOwner: TComponent; JustthisLW: TLW); overload;
> [2]
> constructor Create(AOwner: TComponent; JustThisPfad: string);
> overload; [3]
>
> [2] + [3] ergeben die Warnung 'Methode 'Create' verbirgt virtuelle
> Methode vom Basistyp'

"reintroduce" macht nix anderes als diese Warnung zu unterdrücken.

So funktioniert das:

constructor Create(AOwner: TComponent); overload; override;

constructor Create(AOwner: TComponent; Opt1: Integer); reintroduce; overload; virtual;

> - 'reintroduce' fällt weg, da ich 'inherited Create' benötige

Auch in einer wiedereingeführten Methode kannst du "inherited" verwenden,
muss dann nur genauer spezifiziert werden:

constructor TMyKompo.Create(AOwner: TComponent; Opt1: Integer);
begin
inherited Create(AOwner);
..
end;

Unschön beim Überladen des Konstruktors ist, dass er dann mit der
selben Signatur z.B. in den Tooltips zweimal auftaucht.

> So läufts:


> constructor Create(AOwner: TComponent); override;
> constructor CreatePartiell(AOwner: TComponent; JustthisLW: TLW);
> overload;
> constructor CreatePartiell(AOwner: TComponent; JustThisPfad:
> string); overload;
>

> ... und 'inherited Create' kann ich hier auch überall anwenden ;-)


>
> Frage: ist doch ok, oda?

Ja, oder benutze eine Klassen-Methode die den Konstruktor aufruft:

class function MyCreate(AOwner: TComponent; Opt1: Integer): TMyKompo; overload; virtual;
class function MyCreate(AOwner: TComponent; Opt1, Opt2: Integer): TMyKompo; overload; virtual;

class function TMyKompo.MyCreate(AOwner: TComponent; Opt1: Integer): TMyKompo;
begin
Result := Create(AOwner);
..
end;

..

--
Arno Garrels

0 new messages