![]() |
ständiges Typecasting bei Parametern
Hi!
Ich übergebe Items[I] von einer von TObjectList abgeleiteten Klasse als Parameter an eine selbstgeschriebene Methode. Die Methode erwartet allerdings keinen Parameter vom Typ TObject, sondern vom eigenen Typen namens TItem. Nun muss ich immer, wenn ich Items[I] als Parameter an diese Methode übergebe "as TItem" hinzufügen. Meine Fragen dazu: 1. Ist es möglich, dass der Rückgabewert von Items[I] nicht TObject sondern TItem immer ist? Denn die von TObjectList abgeleitete Klasse soll sowieso nur Objekte vom Typen TItem verwalten. 2. Wie macht man das am besten? 3. Ist das überhaupt ratsam? Geschwindigkeitsfressend? |
Re: ständiges Typecasting bei Parametern
Zitat:
Zitat:
Zitat:
|
Re: ständiges Typecasting bei Parametern
Zitat:
Delphi-Quellcode:
Einfach weiterhin eine TObjectList, nur diesmal mit einem typisierten Indexer. ;)
type
TSomeItemList = class(TObjectList) private function getItem(aIndex : Integer) : TSomeItem; procedure setItem(aIndex : Integer; aValue : TSomeItem); public property Item[aIndex : Integer] : TSomeItem read getItem(aIndex : Integer) : TSomeItem; write setItem(aIndex : Integer; aValue : TSomeItem); end; function TSomeItemList.getItem(aIndex : Integer) : TSomeItem; begin result := inherited Item[aIndex] as TSomeItem; end; procedure TSomeItemList.setItem(aIndex : Integer; aValue : TSomeItem); begin inherited Item[aIndex] := aValue; end;
Delphi-Quellcode:
Ein Hard cast "TSomeItem(someValue)" kostet gar nix, außer der explicit-Operator wurde überschrieben.
3. Ist das überhaupt ratsam? Geschwindigkeitsfressend?
Ein safe cast "(someValue as TSomeItem)" enthält eine Typenprüfung und kostet somit etwas. Aber es kostet nur minimal. |
Re: ständiges Typecasting bei Parametern
Danke, ich werd's nachher oder vll auch erst morgen mal ausprobieren.
Zitat:
|
Re: ständiges Typecasting bei Parametern
Ein safe-Cast überprüft, ob die Typen kompatibel sind, ein hard cast nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz