[delphi] hoe een functie een variabel type te geven.

Pagina: 1
Acties:

  • tyball
  • Registratie: December 2000
  • Laatst online: 31-07 14:32
Ik heb 2 klassen. De super klasse moet een abtracte functie worden met een variabele result type dat afhangt van
de implementatie klasse, zoiets als dit:

TA=class(TObject)
class function getInstance:Type_van_implementatie_klas;virtual;abtract

TB=class(A)
class function getInstance:TB;override;

Kan dit en zo ja hoe?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Je functies zullen afaik allemaal dezelfde signature moeten hebben, wil je ze overriden.

Wat je kan doen, is om voor alle functies (zowel de abstract als de overriden) het type v/d basis-klasse te nemen als return type.

De classes die je afleidt van de basisklasse zijn nl. ook van het type 'basisklasse'. Je zult dan wel wat moeten casten enzo.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TA=class(TObject)
   public
         function getInstance : TA; virtual; abstract;
end;

TB = class(TObject)
   public
         function getInstance : TA; override;
end;

function  TB.getInstance()
begin
    return self;
end;


en:
code:
1
2
3
4
5
6
7
var
   someting : TB;
begin

   something = TB(aTBObject.GetInstance());

end;

Niet letten op de code, 't is uit de losse pols, en 't is al lang geleden dat ik nog Delphi gedaan heb.

https://fgheysels.github.io/


  • Beowulf27
  • Registratie: September 2003
  • Laatst online: 11-09-2024
Zoiets bedoel je?

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TA = class (TObject)
private
  function GetInstance : TA; virtual; abstract;
end;

TB = class (TA)
private
  function GetInstance : TB; reintroduce;
end;

function TB.GetInstance : TB;
begin
  result := self;
end;

Working @ http://www.tricode.nl


  • tyball
  • Registratie: December 2000
  • Laatst online: 31-07 14:32
reintroduce ,inderdaad dat is het. Bedankt!

[ Voor 18% gewijzigd door tyball op 10-11-2003 15:20 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

alleen een virtual methode in de private sectie is een beetje onzinnig... dan kun je em niet aanroepen via de base class.

日本!🎌