2010-04-16 4 views
7

Supposons que j'ai ces trois méthodes définies:Fonction Surcharger

int F1(int, int); 
int F1(float, float); 
Float F1(int, int); 

et je fais appel méthode F1 ici:

Console.writeline(F1(5,6).ToString())); 

Quelle méthode il appellera et pourquoi?

Répondre

16

La première et la troisième fonction ne seront pas compilées dans le même espace de noms. Cela s'explique par le fait que les signatures de fonction sont différenciées par le type et le nombre de paramètres, et qu'elles sont identiques. Les types de retour ne sont pas considérés comme faisant partie de la signature de la méthode.

Si vous n'aviez que les premier et deuxième (ou deuxième et troisième) dans l'espace de noms, le plus approprié serait appelé (celui avec des types entiers passés, comme vous passez des entiers).

Eric Lippert a quelques bons blog entries sur les subtilités de C#.

+1

+1 Pour Lippert Link –

0

Avez-vous essayé?

On pourrait penser qu'il doit exécuter soit:

int F1(int, int); 

ou

Float F1(int, int); 

surcharge de fonction, cependant, ne fonctionne pas sur les valeurs de retour - ce sont les types de paramètres qui doivent être uniques, donc cela ne compilerait même pas.

-1

En C# c'est le paramètre surcharge, pas de surcharge de fonction. Vous pouvez modifier les paramètres d'entrée d'une méthode, ce qui peut conduire à un type de retour différent, mais vous ne pouvez pas spécifier un type de retour differnt pour distinguer votre méthode.

0

En surcharge de fonction, le nom d'une fonction est le même, mais elle diffère selon le type de paramètre ou le nombre de paramètres.

En Fonction surchargement, le type de retour d'une fonction n'est pas pris en compte.

Donc, ce code ne sera même pas compilé. Parce que vous ne pouvez pas écrire exactement la même fonction dans un espace de noms.

2

erreur de compilation car la même signature de fonction est utilisée deux fois dans votre programme!

int F1(int, int); 

Float F1(int, int); 
signature de la fonction

est (nom de la fonction + nombre d'arguments + de type pour chaque argument) qui est la même dans votre cas ...

-1

Fondamentalement, la surcharge est fonctionner une caractéristique importante OOPS.

Il vous permet d'avoir plus d'une méthode avec le même nom mais avec des variations dans la liste des paramètres.

Quelle forme la surcharge de fonctions, ce qui est pas appelé la surcharge de fonctions, et pourquoi il est compiler polymorphisme de temps sont bien expliquées dans l'article Function Overloading in OOPS

1
class Program 
{ 
    static void Main(string[] args) 
    { 

     Add(3, 4,3); 
    } 
    public static void Add(int FN, int SN) 
    { 
     Console.WriteLine("Total is {0}", FN + SN); 
    } 
    public static void Add(int FN, int SN, int TN) 
    { 
     Console.WriteLine("Total is {0}", FN + SN + TN); 
    } 
} 

méthode surchargeant et les termes de surcharge de fonction sont utilisés de manière interchangeable. La surcharge de méthode permet à une classe d'avoir plusieurs méthodes avec le même nom. Mais avec une signature différente. Les fonctions C# peuvent être surchargées en fonction du nombre, du type (int, float etc) et du type (Value, ref ou out) des paramètres. La signature de la méthode n'inclut pas le type de retour et le modificateur params. Il n'est donc pas possible de surcharger une fonction en fonction du type de retour et du modificateur params.

Questions connexes