![]() |
Zwei Funktionen mit dem selben Namen?
Hallo,
wie macht es Borland eigentlich, dass es zwei verschiedene Funktionen mit dem gleichen Namen, aber unterscheidlichen Parametern geben darf? Beispiel: 1. Format const Format: string; const Args: array of const 2. Format const Format: string; const Args: array of const; const AFormatSettings: TFormatSettings Ich würde das auch gerne machen, mit einem LoremIpsum - Generator: function CreateLoremIpsum(aWorte: Integer = 2): String; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer)): String; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True): String; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True; aVariante: TLoremIpsumVariant = Standard): String; LG :-) |
AW: Zwei Funktionen mit dem selben Namen?
In dem die Funktionen mit "overload" markiert sind.
Delphi-Quellcode:
Da du hier aber alles mit Default Parametern arbeitest, brauchst du garkeine überladnen Funktionen. Die letzte Funktion reicht da.
function CreateLoremIpsum(aWorte: Integer = 2): String; overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer)): String; overload; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True): String; overload; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True; aVariante: TLoremIpsumVariant = Standard): String; overload; |
AW: Zwei Funktionen mit dem selben Namen?
Keyword overload hilft nicht?
Beispiel:
Delphi-Quellcode:
function Foo(_Param1: Integer=2; _Param2 : Integer=3) : string; overload;
function Foo(_Param1: Integer=2; _Param2 : Integer=3; _Param3: Boolean = True) : string; overload; function Foo(_Param1: Integer=2; _Param2 : Integer=3; _Param3: Boolean = True; _Param4: Boolean = True) : string; overload; |
AW: Zwei Funktionen mit dem selben Namen?
Die Funktionen mit einem Overload kennzeichnen
Delphi-Quellcode:
function CreateLoremIpsum(aWorte: Integer = 2): String;overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer)): String;overload; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True): String;overload; function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True; aVariante: TLoremIpsumVariant = Standard): String;overload; [Edit] Hahaha. Drei mit dem gleichen Gedanken |
AW: Zwei Funktionen mit dem selben Namen?
![]() Aber so geht das garnicht, da du optionale Parameter dabei nicht betrachten darfst, weil es kann sein, dass sie nicht angegeben werden. Es müssen sich die Typen der Parameter unterscheiden. (Parameter-Name und Result-Typ und Default-Values sind irrelevant) Also alle Default-Parameter bei dir weggelassen und schon sind alle Varianten identisch und lassen sich somit nicht überladen.
Delphi-Quellcode:
Aber gerade an diesem Beispiel ist diese ganze Angelegenheit eh total sinnlos, da alle Fälle durch die letzte/längste Funktion behandelt werden, wenn dort alles mit Default-Values versehen ist.
function CreateLoremIpsum(aWorte: Integer = 2): String; overload;
function CreateLoremIpsum(aWorte: Integer; aAbsatz: Integer): String; overload; function CreateLoremIpsum(aWorte: Integer; aAbsatz: Integer; aUsePre: Boolean): String; overload; function CreateLoremIpsum(aWorte: Integer; aAbsatz: Integer; aUsePre: Boolean; aVariante: TLoremIpsumVariant): String; overload; |
AW: Zwei Funktionen mit dem selben Namen?
Himitsu hat es mit den Defaultparametern natürlich auf den Punkt gebracht. :thumb:
|
AW: Zwei Funktionen mit dem selben Namen?
Hallo nochmal,
danke euch allen. overload war mir natürlich bekannt. Dennoch mach tes Borland anders: ![]() Ohne overload. Daher meine Frage. LG |
AW: Zwei Funktionen mit dem selben Namen?
Wer behauptet denn, dass es dort nicht mit Overload deklariert ist?
Man schaue nur mal in die System.SysUtils.pas :roll: |
AW: Zwei Funktionen mit dem selben Namen?
Zitat:
Wenn du in den Source der SysUtils schaust sieht das so aus:
Delphi-Quellcode:
function Format(const Format: string; const Args: array of const): string; overload;
function Format(const Format: string; const Args: array of const; const AFormatSettings: TFormatSettings): string; overload; |
AW: Zwei Funktionen mit dem selben Namen?
Die Funktion CompareStr hat auch 2 Versionen:
Delphi-Quellcode:
aber auf Emba-Seite sind sie wieder ohne overload beschrieben:
function CompareStr(const S1, S2: string): Integer; overload;
function CompareStr(const S1, S2: string; LocaleOptions: TLocaleOptions): Integer; overload; ![]() Also, das ist in der Dokumentation gewollt so. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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