重在函数

5 本我 1个月前 190次点击

在调用函数时,必须匹配函数的签名。这表明,需要有不同的函数操作不同类型的变量。函数重载允许创建多个同名函数,每个函数可使用不同的参数类型。

class Program

{

//定义函数:最大值

static int 最大值(int[] int数组)

{

//将最大值初始化为数组的第一项,然后依次比较,如果比他大则取而代之

int 最大值 = int数组[0];

for (int i = 1; i < int数组.Length; i++)

{

if (int数组[i] > 最大值)

最大值 = int数组[i];

}

return 最大值;

}

//定义函数:最大值

static double 最大值(double[] double数组)

{

//将最大值初始化为数组的第一项,然后依次比较,如果比他大则取而代之

double 最大值 = double数组[0];

for (int i = 1; i < double数组.Length; i++)

{

if (double数组[i] > 最大值)

最大值 = double数组[i];

}

return 最大值;

}

static void Main(string[] args)

{

//声明数组:我的数组

double[] 我的数组 = { 1.1,2.2,3.3,4.4};

//调用函数最大值()

WriteLine($"我的数组的最大值={最大值(我的数组)}");

ReadKey();

}

}

这里的区别是使用了double值。函数名称最大值()是相同的,但其签名是不同的。这是因为如前所述,函数的签名包含函数的名称及其参数。用相同签名来定义两个函数是错误的,但因为这里的两个函数的签名不同,所以没有问题。

注意:

函数的返回类型不是其签名的一部分,所以不能定义两个仅返回类型不同的函数,它们实际上有相同的签名。

添加了前面的代码后,现在有两个版本的最大值(),它们的参数是int和double数组,分别返回int或double类型的最大值。

这种代码的优点是不必显式地指定要使用哪个函数。只需提供一个数组参数,就可以根据使用的参数类型执行相应的函数。

此时,应注意VS中IntelliSense的另一项功能。如果在应用程序中有上述两个函数,而且要在Main()或其他函数中键入函数的名称,IDE就可以显示出可用的重载函数。如果键入下面的代码:

WriteLine($"我的数组的最大值={最大值(}");

IDE就会提供两个最大值()版本的信息,可使用上下箭头键在其间滚动图形

在重载函数时,应包括函数签名的所有方面。例如,有两个不同函数,它们分别带有值参数和引用参数:

static void ShowDouble(ref int val)

{

...

}

static void ShowDouble(int val)

{

...

}

选用哪个版本完全根据函数调用是否包含ref关键字来确定。下面的代码将调用引用版本:

ShowDouble(ref val);

下面的代码调用值版本:

ShowDouble(val);

此外,还可以根据参数的个数等来区分函数。


目前还没有评论
添加一条新评论

登录后可以发表评论 去登录