Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 函数得载_C#_.net - Fatal编程技术网

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