Fil*_*ącz 22

这意味着您提供的函数(方法或运算符)具有相同的名称,但具有不同的签名.例如:

void doSomething();
int doSomething(string x);
int doSomething(int a, int b, int c);
Run Code Online (Sandbox Code Playgroud)

  • 其实我不喜欢第一个例子.请注意,更改方法返回类型(在此示例中为void而不是int)不包含重载.这是一种完全不同的方法.重载仅指更改参数类型 (4认同)

Ser*_*gel 15

基本概念

重载或"方法重载"是具有多个具有相同名称但具有不同参数的方法的概念的名称.

例如,c#中的System.DateTime类有多个ToString方法.标准ToString使用系统的默认文化将datetime转换为string:

new DateTime(2008, 11, 14).ToString(); // returns "14/11/2008" in America
Run Code Online (Sandbox Code Playgroud)

而同一方法的另一个重载允许用户自定义格式:

new DateTime(2008, 11, 14).ToString("dd MMM yyyy"); // returns "11 Nov 2008"
Run Code Online (Sandbox Code Playgroud)

有时参数名称可能相同,但参数类型可能不同:

Convert.ToInt32(123m);
Run Code Online (Sandbox Code Playgroud)

将小数转换为int

Convert.ToInt32("123");
Run Code Online (Sandbox Code Playgroud)

将字符串转换为int.

过载分辨率

为了找到要调用的最佳重载,编译器执行名为"重载分辨率"的操作.对于第一个示例,编译器只需匹配参数计数即可找到最佳方法.对于第二个示例,如果传递十进制参数,编译器会自动调用replace方法的十进制版本,如果传递字符串参数,则调用字符串版本.从可能的输出列表中,如果编译器找不到合适的调用,则会出现编译器错误,如"最佳过载与参数不匹配...".

您可以找到有关不同编译器如何执行重载决策的大量信息.


Gor*_*pik 6

当一个函数有多个签名时,它会被重载.这意味着您可以使用不同的参数类型调用它.例如,您可能具有在屏幕上打印变量的功能,您可以为不同的参数类型定义它:

void print(int i);
void print(char i);
void print(UserDefinedType t);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,函数print()将有三个重载.