/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Class-reference og metodekald
Fra : Thomas Holmgren


Dato : 16-04-04 09:42

Hej!

Jeg har en class-reference i min klasse.

Defineret således:

type
TItemClassType = class of TItem;

var
fItemClassType : TItemClassType;

Jeg assigner fItemClassType til en specifik klasse (eg. TMyItem som
arver fra TItem) og bruger derefter fItemClassType.Create() til at
instantiere TMyItem-objekter runtime. Det virker fint, herligt.

MEN, kan det lade sig gøre at kalde METODER på den klasse som
fItemClassType er assignet til? Ved at typecaste et eksisterende objekt
til den type som er assignet fItemClassType? Jeg har prøvet at:

(myObject as fItemClassType).Metode()

og håbede at Metode() så ville blive kaldt på den klasse fItemClassType
er assignet til (altså i dette eksempel TMyItem). Det sker ikke, i
stedet bliver metoden kaldt på TItem.

Kan jeg bruge en klassereference til dette?

Tak for hjælpen


--
Mvh.
Thomas Holmgren

 
 
Bøllebob (29-04-2004)
Kommentar
Fra : Bøllebob


Dato : 29-04-04 14:57


"Thomas Holmgren" <thm_fjern_@_fjern_regnecentralen.dk> skrev i en
meddelelse news:c5o691$ubh$1@news.cybercity.dk...
> Hej!
>
> Jeg har en class-reference i min klasse.
>
> Defineret således:
>
> type
> TItemClassType = class of TItem;
>
> var
> fItemClassType : TItemClassType;
>
> Jeg assigner fItemClassType til en specifik klasse (eg. TMyItem som
> arver fra TItem) og bruger derefter fItemClassType.Create() til at
> instantiere TMyItem-objekter runtime. Det virker fint, herligt.
>
> MEN, kan det lade sig gøre at kalde METODER på den klasse som
> fItemClassType er assignet til? Ved at typecaste et eksisterende objekt
> til den type som er assignet fItemClassType? Jeg har prøvet at:
>
> (myObject as fItemClassType).Metode()
>
> og håbede at Metode() så ville blive kaldt på den klasse fItemClassType
> er assignet til (altså i dette eksempel TMyItem). Det sker ikke, i
> stedet bliver metoden kaldt på TItem.
>
> Kan jeg bruge en klassereference til dette?
>
> Tak for hjælpen
>
>
> --
> Mvh.
> Thomas Holmgren

Hej Thomas,

i din sætning hvor du skriver:

(myObject as fItemClassType).Metode()

bør være:
(myObject as TItemXXXX).Metode().

Hvor TItemXXXX er en eller anden klasse der har nedarvet fra TItem. Måske et
tjek:

if MyObject is TItemXXXX then
TItemXXXX(MyObject).Metode

er mere passende.

Det du efterlyser er nok polymorfisme. Du har en baseklasse f.eks.:

TItem = class(TObject)
public
procedure Metode1; virtual;
end;

TItem2 = class(TItem)
public
procedure Metode1; override;
end;

Nu kan du kalde Metode1:

MyObject.Metode1;

Håber det hjælper lidt.

/Brian



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste