实现不同版本的重载方法的定义和使用
通过使用可选参数和具名参数实现编译器根据参数自动选择重载方法版本
*可选参数:定义方法时为参数提供默认值,没有提供默认值的参数是必需参数,提供默认值的参数是可选参数,可选参数只能放在必须参数之后,例如:
1*void method(int first,double second =2.0,char third = 'c' )
{
}
2*void method(int first,double second =2.0 )
{
}
3*void method(int first )
{
}
4*void method( )
{
}
*调用方法时,必需参数必须提供实参,可选参数可以省略,例如:
method(1);
或
method(1,3.0);
*调用方法时,没有提供实参的可选参数,在方法运行时,使用默认值。
*C#默认根据每个实参在方法调用中的位置判断对应形参,例如以下调用方式中参数填写就是错误的,但是编译器不会报错,会自动做数据类型转换。
method(1,'a')
实参字符a会传递给参数second,并不会传递给参数third;
*传递具名参数
C#允许按名称指定具名参数,这样就可以按不同的顺序传递参数,方法是输入参数名和一个冒号,然后是要传递的实参,具名参数可以按照任意顺序传递实参,还可以省略实参,参数按默认值运行。例如:
method(fist : 1,third : 'c');
如果如下调用方法
method(1);
省略了second,third参数,版本1,2,3都适用,那么编译器会选择哪个版本呢?
答案是都不选,因为有歧义,编译器会报错。