2010-04-16 6 views
7

Предположим, у меня есть эти три метода определены:Функция Перегрузки

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

и я звоню метод F1 здесь:

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

Какой метод будет звонить и почему?

ответ

16

Первая и третья функции не будут компилироваться в одном пространстве имен.

Это потому, что сигнатуры функций различаются по типу и количеству параметров, и это то же самое. Типы возврата не рассматриваются как часть подписи метода.

Если у вас были только первая и вторая (или вторая и третья) в пространстве имен, то была бы названа наиболее подходящая (одна с целыми типами, в которую вы проходили целые числа).

Эрик Липперт имеет некоторые отличные blog entries о тонкостях C#.

+1

+1 Для Lippert Link –

0

Вы пробовали?

Вы думали бы, что он должен выполнить либо:

int F1(int, int); 

или

Float F1(int, int); 

Перегрузка функций, однако, не работает на возвращаемые значения - это типы параметров, которые должны быть уникальными, так что это даже не компилируется.

-1

В C# это параметр перегрузка, а не перегрузка функции. Вы можете изменить входные параметры для метода, что может привести к другому типу возврата, но вы не можете указать тип возвращаемого типа, чтобы отличить ваш метод.

0

В функции перегрузки имя функций одинаково, но они различаются в любом типе параметра или номере параметра.

В функции перегрузки возвращаемый тип функции не учитывается.

Так что этот код даже не компилируется. Поскольку вы не можете написать точно такую ​​же функцию в одном пространстве имен.

2

сбор ошибка, потому что одна и та же функция подпись используется дважды в вашей программе!

int F1(int, int); 

Float F1(int, int); 

функция подпись (имя функции + число аргументов + типа для каждого аргумента) что же в вашем случае ...

-1

В основном функционируют перегрузкой является важной особенностью OOPS.

Он позволяет использовать несколько методов с тем же именем, но с изменениями в списке параметров.

Что формирует перегрузку функции, то, что не называется функция перегрузкой, и поэтому время компиляции полиморфизм хорошо описаны в статье 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); 
    } 
} 

Метод перегрузочные и функции перегрузки термины используются как синонимы. Перегрузка метода позволяет классу иметь несколько методов с тем же именем. Но с другой подписью. Функции C# могут быть перегружены в зависимости от числа, типа (int, float и т. Д.) И вида (значения, ref или out) параметров. Подпись метода не включает тип возвращаемого значения и модификатор params. Таким образом, невозможно перегрузить функцию на основе типа возвращаемого значения и модификатора params.

Смежные вопросы