(原创)c#学习笔记06--函数05--函数的重载
2015-10-27 11:07
323 查看
6.5 函数的重载
函数重载允许创建多个同名函数。这些函数可使用不同的参数类型。(函数重载不能用函数返回值作为区分。如果只是返回值不同就能重载函数,那么调用函数时就无法知道调用哪个返回值函数(别忘了类型隐式转换),所以就没办法执行代码,所以不能用返回值来区分函数重载。)
例如,前面使用了下述代码,其中包含函数MaxValue():
这个函数只能用于处理 int 数组,现在要为不同的参数类型提供不同名称的函数,可以把上述函数重命名为 IntArrayMaxValue(),添加诸如 DoubleArrayMaxValue()的函数处理其他类型。另外,还可以在代码中添加如下函数:
这里的区别是使用了double值。函数名称MaxValue()是相同的,但其签名是不同的。这是因为如前所述,函数的签名包含函数的名称及其参数。用相同的签名定义两个函数是错误的,但因为这两个函数的签名不同,所以是可行的。
note: 函数的返回值类型不是签名的一部分,所以不能定义两个仅返回类型不同的函数,它们实际上有相同的签名。
这种代码的优点是不必显式地指定要使用哪个函数。只需提供一个数组参数,就可以根据使用的参数类型执行相应的函数。
在重载函数时,应包括函数签名的所有方面。例如,有两个不同的函数,它们分别带有值参数和引用参数:
选择使用哪个版本纯粹是根据函数调用是否包含 ref 关键字来确定的。下面的代码将调用引用版本:
ShowDouble(ref val);
下面的代码是调用值版本:
ShowDouble(val);
另外,还可以根据参数的个数等来区分函数。
函数重载允许创建多个同名函数。这些函数可使用不同的参数类型。(函数重载不能用函数返回值作为区分。如果只是返回值不同就能重载函数,那么调用函数时就无法知道调用哪个返回值函数(别忘了类型隐式转换),所以就没办法执行代码,所以不能用返回值来区分函数重载。)
例如,前面使用了下述代码,其中包含函数MaxValue():
class Program { static int MaxValue(int[] intArray) { int maxVal = intArray[0]; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxVal) maxVal = intArray[i]; } return maxVal; } static void Main(string[] args) { int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int maxVal = MaxValue(myArray); Console.WriteLine("The maximum value in myArray is {0}", maxVal); Console.ReadKey(); } }
这个函数只能用于处理 int 数组,现在要为不同的参数类型提供不同名称的函数,可以把上述函数重命名为 IntArrayMaxValue(),添加诸如 DoubleArrayMaxValue()的函数处理其他类型。另外,还可以在代码中添加如下函数:
... static double MaxValue(double[] doubleArray) { double maxVal = doubleArray[0]; for (int i = 1; i < doubleArray.Length; i++) { if (doubleArray[i] > maxVal) maxVal = doubleArray[i]; } return maxVal; } ...
这里的区别是使用了double值。函数名称MaxValue()是相同的,但其签名是不同的。这是因为如前所述,函数的签名包含函数的名称及其参数。用相同的签名定义两个函数是错误的,但因为这两个函数的签名不同,所以是可行的。
note: 函数的返回值类型不是签名的一部分,所以不能定义两个仅返回类型不同的函数,它们实际上有相同的签名。
这种代码的优点是不必显式地指定要使用哪个函数。只需提供一个数组参数,就可以根据使用的参数类型执行相应的函数。
在重载函数时,应包括函数签名的所有方面。例如,有两个不同的函数,它们分别带有值参数和引用参数:
static void ShowDouble(ref int val) { ... } static void ShowDouble(int val) { ... }
选择使用哪个版本纯粹是根据函数调用是否包含 ref 关键字来确定的。下面的代码将调用引用版本:
ShowDouble(ref val);
下面的代码是调用值版本:
ShowDouble(val);
另外,还可以根据参数的个数等来区分函数。
相关文章推荐
- C#--属性详解
- c#习题之2
- C# 生成随机数
- 一个简单的C#加密解密类
- c#习题
- C#图片压缩裁剪处理
- C# 语言在函数参数列表中出现this关键词的作用
- 浅析C#数据类型转换的几种形式
- C# 对文本文件的几种读写方法总结
- c#写windows服务 小demo
- C#创建Windows Service(Windows 服务)基础教程
- C# 编写Windows Service(windows服务程序)
- CLR via C# 读书笔记---常量、字段、方法和参数
- [C#]多维数组和交叉数组
- C#实现选择文件夹对话框
- VS 2010中使用C#创建及调用WCF完整实例(Windows服务宿主)
- C#中数组、ArrayList和List三者的区别
- C# combox加入时间段 yyyy/mm/dd-yyyy/mm/dd
- C# DataGridView内容合并相同的行
- C#-委派和事件