Language agnostic 什么是;超载/&引用;超载“/&引用;超载“;什么意思?

Language agnostic 什么是;超载/&引用;超载“/&引用;超载“;什么意思?,language-agnostic,overloading,Language Agnostic,Overloading,就编程而言,“重载”/“重载”是什么意思?它意味着您提供的函数(方法或运算符)具有相同的名称,但具有不同的签名。 例如: void doSomething(); int doSomething(string x); int doSomething(int a, int b, int c); 当一个函数有多个签名时,该函数被重载。这意味着您可以使用不同的参数类型调用它。例如,您可能有一个在屏幕上打印变量的函数,您可以为不同的参数类型定义它: void print(int i); void pri

就编程而言,“重载”/“重载”是什么意思?

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

void doSomething();
int doSomething(string x);
int doSomething(int a, int b, int c);

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

void print(int i);
void print(char i);
void print(UserDefinedType t);

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

这意味着同一函数的不同版本采用不同类型的参数。这样的函数是“重载的”。例如,使用以下函数:

void Print(std::string str) {
  std::cout << str << endl;
}
void打印(std::string str){

std::cout重载方法是一种具有多个参数数量和类型选项的方法。例如:

foo(foo)

foo(foo, bar)
两者都可以做相对相同的事情,但其中一个有第二个参数用于更多选项

同样的方法也可以采用不同的类型

int Convert(int i)
int Convert(double i)
int Convert(float i)

就像在普通用法中一样,它指的是做不止一项工作的东西(在本例中是一个方法名)。

基本概念

重载,或“方法重载”,是指具有多个同名但参数不同的方法的概念的名称

例如,c#中的System.DateTime类具有多个ToString方法。标准ToString使用系统的默认区域性将DateTime转换为字符串:

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);
将十进制数转换为整数

Convert.ToInt32("123");
将字符串转换为int

过载分辨率

为了找到要调用的最佳重载,编译器执行一个名为“重载解析”的操作。对于第一个示例,编译器只需匹配参数计数即可找到最佳方法。对于第二个示例,如果您传递十进制参数,编译器将自动调用替换方法的十进制版本,如果您传递字符串参数,编译器将调用字符串版本。如果编译器无法从可能的输出列表中找到合适的若要调用,您将得到一个编译器错误,如“最佳重载与参数不匹配…”


关于不同的编译器如何执行重载解析,您可以了解很多信息。

其他人已经回答了重载是什么。当您开始使用时,它会与重写/重写混淆

与重载相反,重写是定义子类(或子类)中具有相同签名的方法,它重写父类实现。一些语言需要显式指令,如C++中的<>代码>虚拟< /COD>成员函数或在Delphi和C<<代码>覆盖/ <代码> .<


重载是穷人版的。这是一个令人困惑的版本


重写是常见的OO方法。它与继承一起使用,我们也将其称为重新定义(例如,
中提供了
Draw()

的专门定义,实际上我不喜欢第一个示例。请注意,更改方法返回类型(本例中为void而不是int)不包含重载。这是一个完全不同的方法。重载仅指更改参数类型。但是,从这里可以看出,这不是不可能实现的。我认为签名也包括函数名,因此它应该是具有相同名称但不同参数的函数。@Yuval不,恐怕你错了。返回根据C#规范第1.6节,类型不是方法签名的一部分。6@Camilo-我们没有争论,这正是我说的。
Convert.ToInt32("123");
using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}