"重载"/"过载"对编程有什么意义?
这意味着您提供的函数(方法或运算符)具有相同的名称,但具有不同的签名.例如:
void doSomething(); int doSomething(string x); int doSomething(int a, int b, int c);
基本概念
重载或"方法重载"是具有多个具有相同名称但具有不同参数的方法的概念的名称.
例如,c#中的System.DateTime类有多个ToString方法.标准ToString使用系统的默认文化将datetime转换为string:
new DateTime(2008, 11, 14).ToString(); // returns "14/11/2008" in America
而同一方法的另一个重载允许用户自定义格式:
new DateTime(2008, 11, 14).ToString("dd MMM yyyy"); // returns "11 Nov 2008"
有时参数名称可能相同,但参数类型可能不同:
Convert.ToInt32(123m);
将小数转换为int
Convert.ToInt32("123");
将字符串转换为int.
过载分辨率
为了找到要调用的最佳重载,编译器执行名为"重载分辨率"的操作.对于第一个示例,编译器只需匹配参数计数即可找到最佳方法.对于第二个示例,如果传递十进制参数,编译器会自动调用replace方法的十进制版本,如果传递字符串参数,则调用字符串版本.从可能的输出列表中,如果编译器找不到合适的调用,则会出现编译器错误,如"最佳过载与参数不匹配...".
您可以找到有关不同编译器如何执行重载决策的大量信息.
当一个函数有多个签名时,它会被重载.这意味着您可以使用不同的参数类型调用它.例如,您可能具有在屏幕上打印变量的功能,您可以为不同的参数类型定义它:
void print(int i); void print(char i); void print(UserDefinedType t);
在这种情况下,函数print()将有三个重载.