C# 函数得载
假设我定义了这三种方法:C# 函数得载,c#,.net,C#,.net,假设我定义了这三种方法: int F1(int, int); int F1(float, float); Float F1(int, int); 我在这里调用方法F1: Console.writeline(F1(5,6).ToString())); 它将调用哪个方法及其原因?第一个和第三个函数不会在同一命名空间中编译 这是因为函数签名是通过参数的类型和数量来区分的,它们是相同的。返回类型不被视为方法签名的一部分 如果名称空间中只有第一个和第二个(或第二个和第三个),则会调用最合适的名称空间(
int F1(int, int);
int F1(float, float);
Float F1(int, int);
我在这里调用方法F1:
Console.writeline(F1(5,6).ToString()));
它将调用哪个方法及其原因?第一个和第三个函数不会在同一命名空间中编译 这是因为函数签名是通过参数的类型和数量来区分的,它们是相同的。返回类型不被视为方法签名的一部分 如果名称空间中只有第一个和第二个(或第二个和第三个),则会调用最合适的名称空间(传入整数类型的名称空间,就像传入整数一样) 埃里克·利珀特对C#的微妙之处有着深刻的理解 你试过了吗 您可能认为它应该执行以下任一操作:
int F1(int, int);
或
然而,函数重载对返回值不起作用-参数类型必须是唯一的,因此这甚至不会编译。在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);
}
}
方法重载和函数重载术语可以互换使用。方法重载允许一个类有多个同名的方法。但签名不同。C#函数可以根据参数的数量、类型(int、float等)和种类(Value、ref或out)进行重载。
方法的签名不包括返回类型和参数修饰符。因此,不可能基于返回类型和参数修饰符重载函数。方法的名称是方法签名的一部分,因此“方法重载允许类具有多个具有相同名称但具有不同签名的方法”的定义不太正确!也许我们最好这样说:方法重载是实现两个或多个方法,它们的名称相同,但在类中参数的数量、类型、顺序和种类(ref/out/value)不同
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);
}
}