Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array-Property überladen (https://www.delphipraxis.net/104700-array-property-ueberladen.html)

Ares 9. Dez 2007 14:18


Array-Property überladen
 
Hallo!

Gibt es eine Möglichkeit eine Array-Property einer Klasse zu überladen?

Ich würde gerne folgendes erreichen:

Delphi-Quellcode:
type
  TMyEnum = (meEins, meZwei, meDrei);

  TMyClass = class(TObject)
  private
    function GetItem(Index: Integer): TMyItemType; overload;
    function GetItem(Index: TMyEnum): TMyItemType; overload;
  public
    property Item[Intex: Integer]: TMyItemType read GetItem;
    property Item[Intex: TMyEnum]: TMyItemType read GetItem;
  end;

...

function TMyClass.GetItem(Index: Integer): TMyItemType;
begin
  result := ...
end;
function TMyClass.GetItem(Index: TMyEnum): TMyItemType;
begin
  result := ...
end;

...

Item := MyClass.Item[emEins];
Wenn ich dies so implementiere sag mir der Compiler nur "Es gibt eine Überladene Funktion der Array-Eigenschaft Item die mit diesem Argument" aufgerufen werden kann. Daher weiß ich nicht, ob dies generell möglich ist und ich nur einen Fehler bei der implementierung gemacht habe, oder ob das genrell nicht geht..

Besten Dank
Ares

Hawkeye219 9. Dez 2007 15:05

Re: Array-Property überladen
 
Hallo Ares,

bei neueren Delphi-Versionen ist das durchaus möglich.

Gruß Hawkeye

himitsu 9. Dez 2007 15:19

Re: Array-Property überladen
 
Hauptproblem sind erstmal die Tyen ... beide Ordinal

aber da der Name in Private doch eher egal ist:
Delphi-Quellcode:
TMyClass = class(TObject)
private
  function GetItemI(Index: Integer): TMyItemType;
  function GetItemE(Index: TMyEnum): TMyItemType;
public
  property Item[Intex: Integer]: TMyItemType read GetItemI;
  property Item[Intex: TMyEnum]: TMyItemType read GetItemE;
end;
weiter bleibt dann aber noch das Problem mit "property Item", welche nicht unbedingt überladen werden können (abgesehn von Hawkeye219's Link)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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