2013-09-21 5 views
0

Несомненно, то же самое можно сделать, создав другой метод с другим именем?Зачем вам нужно перегружать методы?

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); 
} 

Какова польза перегрузки методы?

+3

Другие имена == еще запомнить. –

+2

Вы используете 'Console.WriteLine', который имеет [много перегрузок] (http://msdn.microsoft.com/en-us/library/system.console.writeline.aspx), но разве не приятно иметь использовать 'Console.WriteString',' Console.WriteInt64', 'Console.WriteFloat' и т. д. для разных типов? :) – keyboardP

+0

@HansPassant Я бы предпочел написать его как 'more names => more для запоминания'. Поскольку «больше имен» - это не то же самое, что «больше запоминать». – Cruncher

ответ

1

Вам не нужен , однако он помогает поддерживать совместимость вашей программы. Вам не нужно явно указывать в своем имени метода, что вы можете поздороваться с двумя людьми, ваш код должен говорить сам за себя.

Это должно быть очевидно, что

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

и

public void SayHello(String person1, string person2) { 
    Console.WriteLine("Hello, " + person1 + " and, " + person2); 
} 

обходится без того, чтобы сделать чрезвычайно избыточные имена методов.

0

Пособие в большинстве случаев чисто семантическое. Если два метода делают одно и то же (но принимают несколько разные аргументы), почему их называют иначе?

Если вы читаете API, его гораздо легче читать, если методы сгруппированы в соответствии с их перегрузками.

0

Хорошим примером, о котором я могу думать, было бы, когда у вас есть сложная функция, которая дает пользователю разные способы выполнения одной и той же функции. Вы можете удалить аргументы, когда хотите «угадать» то, что хочет пользователь.

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

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

Перегруженные методы улучшают ясность кода. При разработке сложных программ изменения кода и некоторые ветви становятся ненужными. Для устранения сложности и повышения производительности добавляются перегруженные методы.

Вы можете прочитать на

C# Overload Method

, а также из выписки из книги Джона Скита C# in Depth

C# in Depth : Overloading

0

Это делает класс Конструкторы проще в использовании, потому что он всегда имеет то же самое имя.

Смежные вопросы