C# 函数重载:不明确的调用
C# Function Overloading : Ambiguous Call
由于参数排列不同,得到模棱两可的调用:short,int / int,short /byte,int / int,byte
因为函数签名是:
1.Number of arguments/parameters
2.Type of arguments/parameters
3.Arrangement of arguments/parameters
为什么调用不明确?应该属于同类吗?...
代码:
class Program
{
static void Main(string[] args)
{
test abbb = new test();
//abbb.add(2.2f,1);
// abbb.add(2,2.2f);
abbb.add(255,1);
abbb.add(1,256);
Console.ReadLine();
}
}
class test
{
public int add(byte i , int f) {
return i + f;
}
public int add(int i, byte f)
{
return i + f;
}
public int add(short i, int f)
{
return i + f;
}
public int add(int i, short f)
{
return i + f;
}
}
这是有歧义的,因为C#不知道这两个数字中的哪个是哪个类型。
1 和 256 都可能是 short,也可能是 int。
您可以对其中一种方法使用显式转换 "choose"。
默认情况下,任何 'Magic Number' 都将被视为整数,但有时为了便于使用,编译器如果有足够的信息可以隐式转换为另一种数字格式。
为了避免模棱两可的调用,您最好先为数字显式定义类型化变量,然后将它们传递给函数以消除任何歧义。
class Program
{
static void Main(string[] args)
{
test abbb = new test();
Console.WriteLine(abbb.add(32767, 32770)); //short , int
Console.WriteLine(abbb.add(32770, 32767)); //int ,short
Console.WriteLine(abbb.add(255, 32770)); // byte,int
Console.WriteLine(abbb.add(32770, 255)); // int,byte
Console.ReadLine();
}
}
class test
{
public int add(byte f, int i)
{
return i + f;
}
public int add(int i, byte f)
{
return i + f;
}
public int add(short i, int f)
{
return i + f;
}
public int add(int f, short i)
{
return i + f;
}
}
由于提到的特定类型范围,没有歧义...
由于参数排列不同,得到模棱两可的调用:short,int / int,short /byte,int / int,byte
因为函数签名是:
1.Number of arguments/parameters
2.Type of arguments/parameters
3.Arrangement of arguments/parameters
为什么调用不明确?应该属于同类吗?...
代码:
class Program
{
static void Main(string[] args)
{
test abbb = new test();
//abbb.add(2.2f,1);
// abbb.add(2,2.2f);
abbb.add(255,1);
abbb.add(1,256);
Console.ReadLine();
}
}
class test
{
public int add(byte i , int f) {
return i + f;
}
public int add(int i, byte f)
{
return i + f;
}
public int add(short i, int f)
{
return i + f;
}
public int add(int i, short f)
{
return i + f;
}
}
这是有歧义的,因为C#不知道这两个数字中的哪个是哪个类型。 1 和 256 都可能是 short,也可能是 int。 您可以对其中一种方法使用显式转换 "choose"。
默认情况下,任何 'Magic Number' 都将被视为整数,但有时为了便于使用,编译器如果有足够的信息可以隐式转换为另一种数字格式。 为了避免模棱两可的调用,您最好先为数字显式定义类型化变量,然后将它们传递给函数以消除任何歧义。
class Program
{
static void Main(string[] args)
{
test abbb = new test();
Console.WriteLine(abbb.add(32767, 32770)); //short , int
Console.WriteLine(abbb.add(32770, 32767)); //int ,short
Console.WriteLine(abbb.add(255, 32770)); // byte,int
Console.WriteLine(abbb.add(32770, 255)); // int,byte
Console.ReadLine();
}
}
class test
{
public int add(byte f, int i)
{
return i + f;
}
public int add(int i, byte f)
{
return i + f;
}
public int add(short i, int f)
{
return i + f;
}
public int add(int f, short i)
{
return i + f;
}
}
由于提到的特定类型范围,没有歧义...