Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delete (String-Routine) nur noch mit Unit System. vorne dran (https://www.delphipraxis.net/95831-delete-string-routine-nur-noch-mit-unit-system-vorne-dran.html)

Andreas L. 13. Jul 2007 22:42


Delete (String-Routine) nur noch mit Unit System. vorne dran
 
Hi,
ich bastel mal wieder an einer Komponente. Dort habe ich die procedure Delete(Index: Integer); deklariert. Jetzt möchte ich in einer anderen procedure gerne die Delete-Routine (zum löschen eines Teilstrings) verwenden. Jetzt muss ich immer System. davor schreiben, weil Delphi sonst denkt es wäre meine weiter oben deklarierte Procedure. Wie bekomme ich das wieder in den Griff?

Hawkeye219 13. Jul 2007 22:56

Re: Delete (String-Routine) nur noch mit Unit System. vorne
 
Hallo Andreas,

eine Namensüberdeckung bei Routinen läßt sich auf mehrere Arten lösen:

1. Durch overload, falls die Parameterlisten unterschiedlich sind. Dieser Weg ist dir verbaut, da du die RTL-Units nicht ändern kannst bzw. solltest.
2. Durch eine Qualifizierung (z.B. System.Delete). Diese Lösung gefällt dir offenbar nicht.
3. Durch die Umbenennung einer der beiden Routinen.

Du solltest Lösung #3 wählen.

Gruß Hawkeye

DGL-luke 14. Jul 2007 00:13

Re: Delete (String-Routine) nur noch mit Unit System. vorne
 
3. ist innerhalb einer Klasse suboptimal. Da die Funktion "Delete(Index: Integer)" bestimmtes Standardverhalten suggeriert. ich würde es also qualifizieren, oder, wenn das noch zu viel Arbeit ist und man einen modernen Compiler hat, wrappen:

Delphi-Quellcode:
type
  Dingsbums = class
  public
    procedure Delete(Index: Integer);
  private
    procedure DoDelete(Index: Integer);
  end;

...

procedure Dingsbums.DoDelete(Index: Integer); inline; //das inline SOLLTE den Compiler dazu anhalten, die Funktion zu inlinen.
begin
  self.Delete(Index);
end;
Allerdings hatte ich persönlich mit sowas nie Probleme :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.

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