Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么需要重载方法?_C#_Methods_Overloading - Fatal编程技术网

C# 为什么需要重载方法?

C# 为什么需要重载方法?,c#,methods,overloading,C#,Methods,Overloading,当然,用不同的名称创建另一个方法也可以实现同样的效果 public void SayHello(string name) { Console.WriteLine("Hello " + name); } public void SayHello(string name, string name2) { Console.WriteLine("Hello + name + "," + name2); } 与 public void SayHelloToTwoPeople(string n

当然,用不同的名称创建另一个方法也可以实现同样的效果

public void SayHello(string name)
{
  Console.WriteLine("Hello " + name);
}

public void SayHello(string name, string name2)
{
  Console.WriteLine("Hello  + name + "," + name2);
}

public void SayHelloToTwoPeople(string name1, string name2)
{
  Console.WriteLine("Hello  + name + "," + name2);
}
方法重载的好处是什么?

但是,它有助于保持程序的一致性。您不需要在方法名中显式地声明您可以向两个人打招呼,您的代码应该代表自己

这应该是显而易见的

public void SayHello(string person) {
    Console.WriteLine("Hello, " + person);
}


不必做非常冗余的方法名。

在大多数情况下,好处纯粹是语义上的。如果两个方法做相同的事情(但参数稍有不同),为什么命名不同呢


如果您正在阅读一个API,那么如果根据方法的重载对其进行分组,那么阅读它就会容易得多

我能想到的一个很好的例子是,当你有一个复杂的函数,它为用户提供了执行相同函数的不同方式。当您想“猜测”用户想要什么时,可以删除参数

class ImportantClass
{
    public void SomeMethod()
    {
        SomeMethod(1); // Some default value
    }

    public void SomeMethod(int variable)
    {
        // Do something here
    }
}

重载方法提高了代码的清晰度。在设计复杂程序时,代码更改和某些分支变得不必要。添加重载方法以消除复杂性并提高性能

你可以在

也摘自Jon Skeet的书《深入》C#Depth


它使类构造函数更易于使用,因为它总是有相同的名称。

更多的名称==更多的记忆。您使用的是
控制台。WriteLine
,它有但不必使用
控制台。WriteString
控制台。WriteInt64
控制台。WriteFloat
等。。对于不同类型?:)@HansPassant我更愿意把它写成
more names=>more to memory
。因为“更多的名字”和“更多的记忆”不是一回事。
class ImportantClass
{
    public void SomeMethod()
    {
        SomeMethod(1); // Some default value
    }

    public void SomeMethod(int variable)
    {
        // Do something here
    }
}