AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion überladen

Ein Thema von Pseudemys Nelsoni · begonnen am 15. Aug 2006 · letzter Beitrag vom 15. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Funktion überladen

  Alt 15. Aug 2006, 19:29
Moin,

wieso geht das hier nicht:

Code:
     public User MaskExists(string Mask)
        {
            for (int i = 0; i <= users.Count - 1; i++)
            {
                Regex regex = new Regex(((User)users[i]).Mask);

                if (regex.IsMatch(Mask))
                    return (User)users[i];
            }

            return null;
        }

        public bool MaskExists(string Mask)
        {
            return MaskExists(Mask) != null;
        }
Der Compiler meldet:

Zitat:
Fehler 1 Der Typ "Bot.AccessList" definiert bereits einen Member namens "MaskExists" mit den gleichen Parametertypen. C:\Dokumente und Einstellungen\silent\Desktop\Bot\Bot\AccessList.cs 37 21 Bot
Wieos kann ich hier nicht überladen? Die Rückgabetypen unterscheiden sich doch. Soweit ich weiss ging das problemlos in Delphi...

Wie kann ich das machen?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Funktion überladen

  Alt 15. Aug 2006, 19:32
In Delphi müßtest du dem Compiler aber auch mit overload anweisen das zu tun.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Funktion überladen

  Alt 15. Aug 2006, 19:33
in C# muss man das aber ja nicht, wie kann ich das hier tun?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Funktion überladen

  Alt 15. Aug 2006, 19:35
Das was du möchtest geht nicht!
Überladen heißt gleicher Name unterschiedliche Signatur!

Du nennst zwei Methoden gleich, die nur einen String bekommen, der Compiler weiß nicht welchen Typ du zurück möchtest (es könnten ja auch kompatible Typen sein). Wenn du einmal Integer und einmal STring als Argumente hättest, dann klappt's auch mit dem Überladen!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Funktion überladen

  Alt 15. Aug 2006, 19:36
In deinem fall sieht es aber auch, als ob du 2 signatur-gleiche Methoden in einer Klasse hättest. Woher soll dann der Compiler wissen, welche er nehmen soll.
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Funktion überladen

  Alt 15. Aug 2006, 19:38
In dem Fall bietet sich ein Record als Rückgabewert an.

MeineFunktion().AsInteger
MeineFunktion().AsString

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: Funktion überladen

  Alt 15. Aug 2006, 19:39
Also soweit ich weiss, ging das in Delphi. Der Rückgabewert unterscheidet sich doch hm.... Wenn ich das Ergebnis einer Funktion einem string zuweise, müsste der compiler ja wissen, dass ich die meine mit String als Rückgabewert.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#8

Re: Funktion überladen

  Alt 15. Aug 2006, 19:39
Danke omata, bleibt wohl sonst nichts
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Funktion überladen

  Alt 15. Aug 2006, 19:42
Hi,

in solchen Fällen kann man das Problem mit einer Dummy-Variablen umgehen :

Code:
public User MaskExists(string Mask)
{
    for (int i = 0; i <= users.Count - 1; i++)
    {
        Regex regex = new Regex(((User)users[i]).Mask);
        if (regex.IsMatch(Mask))
            return (User)users[i];
    }
    return null;
}

public bool MaskExists(string Mask, int dummy)
{
    return MaskExists(Mask) != null;
}
Dadurch unterscheiden sich die Parameter der beiden Methode.
Den Dummy-Int kann man dann einfach ignorieren.

Gruß,
pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#10

Re: Funktion überladen

  Alt 15. Aug 2006, 19:45
Zitat von Pseudemys Nelsoni:
Also soweit ich weiss, ging das in Delphi. Der Rückgabewert unterscheidet sich doch hm.... Wenn ich das Ergebnis einer Funktion einem string zuweise, müsste der compiler ja wissen, dass ich die meine mit String als Rückgabewert.
Relevant ist ausschließlich und unbedingt die Liste der Argumente/Parameter: diese müssen sich unterscheiden!!! Der Rückgabewert ist dabei unwichtig.
Zitat von NET SDK-Dokumentation:
C#-Programmiersprachenspezifikation
7.4.2 Überladungsauflösung
Überladungsauflösungen sind Kompilierungsmechanismen, mit denen die am besten geeigneten Funktionsmember ausgewählt und eine gegebene Argumentliste aufgerufen sowie eine Gruppe potenzieller Funktionsmember festgelegt werden.
Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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