Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit overload (https://www.delphipraxis.net/54210-problem-mit-overload.html)

idontwantaname 29. Sep 2005 19:13


Problem mit overload
 
Hallo !!

Ich habe ein Problem mit overload. Folgender Code:
Delphi-Quellcode:
  TMyObjectList = class
  private
    FArray: TMyObjArray;
    FOwnObj: Boolean;
    function GetObjInt(Index: Integer): TObject;
    function GetObjStr(Name: String): TObject;
  public
    property Items[Index: Integer]: TObject read GetObjInt; overload{-> hier meckert der Compiler <-};
    property Items[Name: String]: TObject read GetObjStr; overload;
    constructor Create(const AOwnObjects: Boolean);
    procedure Add(Obj: TObject; const Name: String);
  end;
Der Compiler schreibt mir das hier:
Zitat:

[Error] Unit1.pas(41): Field definition not allowed after methods or properties
Leider verstehe ich die Fehler-Meldung in diesem Zusammenhang nicht ganz so :?

Union 29. Sep 2005 19:22

Re: Problem mit overload
 
Property läßt kein overload zu, es ist für Methoden gedacht.

idontwantaname 29. Sep 2005 19:27

Re: Problem mit overload
 
Oh ^^

Gibt es eine andere Möglichkeit, das zu erreichen, was ich möchte ??

Union 29. Sep 2005 19:42

Re: Problem mit overload
 
Zitat:

Zitat von idontwantaname
Oh ^^

Gibt es eine andere Möglichkeit, das zu erreichen, was ich möchte ??

Was möchtest Du denn erreichen?

idontwantaname 29. Sep 2005 19:58

Re: Problem mit overload
 
... dass ich Items einen String oder eine Integer übergeben kann und je nach Typ eine andere Getter-Funktion ausgeführt wird.

Union 29. Sep 2005 20:59

Re: Problem mit overload
 
Zitat:

Zitat von idontwantaname
... dass ich Items einen String oder eine Integer übergeben kann und je nach Typ eine andere Getter-Funktion ausgeführt wird.

Soweit ich weiss geht das nicht mit properties. Du könntest aber Variants verwenden und dann abhängig vom Typ innerhalb der Funktion verzweigen (VarIsNumeric, VarIsStr).

idontwantaname 29. Sep 2005 21:02

Re: Problem mit overload
 
Zitat:

Zitat von Union
Soweit ich weiss geht das nicht mit properties.

schade eigentlich

Zitat:

Du könntest aber Variants verwenden und dann abhängig vom Typ innerhalb der Funktion verzweigen (VarIsNumeric, VarIsStr).
das werde ich wahrschenlich machen

alzaimar 29. Sep 2005 21:41

Re: Problem mit overload
 
Zitat:

Zitat von idontwantaname
Du könntest aber Variants verwenden und dann abhängig vom Typ innerhalb der Funktion verzweigen (VarIsNumeric, VarIsStr).

Das würde ich aber trotzdem nicht machen, weil es vorkommt, das '123' als String interpretiert wird (wenns von einem String stammt). Wer will das sicherstellen?
Ich würde wirklich zwei Properties definieren 'FooByName' und 'FooByID' oder so. Was spricht denn dagegen? So ist es jedenfalls viel übersichtlicher als der unsichere Weg über Variants.

Trotzdem ne lustige Idee.

Union 29. Sep 2005 21:47

Re: Problem mit overload
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von idontwantaname
Du könntest aber Variants verwenden und dann abhängig vom Typ innerhalb der Funktion verzweigen (VarIsNumeric, VarIsStr).

Das würde ich aber trotzdem nicht machen, weil es vorkommt, das '123' als String interpretiert wird (wenns von einem String stammt). Wer will das sicherstellen?
Ich würde wirklich zwei Properties definieren 'FooByName' und 'FooByID' oder so. Was spricht denn dagegen? So ist es jedenfalls viel übersichtlicher als der unsichere Weg über Variants.

Trotzdem ne lustige Idee.

Unter welchen Umständen kann das vorkommen ? Hast Du dafür ein Beispiel ?
Delphi-Quellcode:
var
   v : variant;
begin
   v := '123';
   if VarIsStr(v) then
      ShowMessage('String')
   else if VarIsNumeric(v) then
      ShowMessage('Numeric');
Dieser Code gibt jedenfalls immer "String" aus.

alzaimar 30. Sep 2005 07:06

Re: Problem mit overload
 
Hi Union... eben, sag ich doch (v := '123' ==> v ist String, v:=123 ==> v ist Numerisch). :gruebel: Oder meinst Du meinen Einwand, das man sich nicht sicher sein kann?

Er will doch aber über den Typen des Varianten entscheiden, ob es ein Index oder ein Identifier ist und dann den entsprechenden Getter aufrufen. Das wird eben nicht gehen.

Ich kann das Bestreben verstehen, überladene Methoden und Properties zu erstellen. Auf den ersten Blick kommt man dadurch dem Anwender der Klasse entgegen. Auf den 2.Blick ist das aber sehr fehleranfällig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz