"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