function重载

让我们假设我定义了这三种方法:

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

我在这里叫方法F1:

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

它会调用哪种方法,为什么?

第一个和第三个函数不会在同一个命名空间中编译。

这是因为函数签名根据参数的类型和数量来区分,并且它们是相同的。 返回类型不被视为方法签名的一部分。

如果在名称空间中只有第一个和第二个(或第二个和第三个),则会调用最合适的一个(传入整数类型的那个,因为您传入的是整数)。

Eric Lippert有一些很棒的博客文章,关于C#的微妙之处。

编译错误,因为在您的程序中使用了两次相同的函数签名!

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

函数签名是(函数名称+参数数量+每个参数的类型) ,在您的情况下是相同的…

 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); } } 

方法重载和函数重载项可互换使用。 方法重载允许类具有多个具有相同名称的方法。 但具有不同的签名。 可以根据参数的数量,类型(int,float等)和种类(Value,ref或out)重载C#函数。 该方法的签名不包括return类型和params修饰符。 因此,不可能基于返回类型和params修饰符重载函数。

你试过吗?

你会认为它应该执行:

 int F1(int, int); 

要么

 Float F1(int, int); 

但是,函数重载对返回值不起作用 – 它是必须唯一的参数类型,因此甚至不能编译。

在函数重载函数的名称相同但它们在参数类型或参数数量方面都不同。

在函数重载中,不考虑函数的返回类型。

所以这段代码甚至不会编译。因为你不能在一个命名空间中编写完全相同的函数。

在C#中,它是参数重载,而不是函数重载。 您可以更改方法的输入参数,这可能会导致不同的返回类型,但您无法指定不同的返回类型来区分您的方法。

基本上,函数重载是一项重要的OOPSfunction。

它允许您有多个具有相同名称但方法列表中有变化的方法。

什么forms的函数重载,什么不称为函数重载,以及为什么它是编译时多态性在OOPS中的函数重载一文中得到了很好的解释。