Программирование на C# (Си Шарп) - ООП в .NET - Перегрузка методов

Программирование на C# - ООП C#

ООП С Sharp - Перегрузка методов

Перегрузка метода означает создание нескольких методов — каждый имеет то же самое имя, но отличается сигнатурой. Причину, по которой вам могут понадобиться перегруженные методы, лучше пояснить на примере. Рассмотрим, как с помощью C# выводятся данные на консоль с помощью метода Console.WriteLine().

Например, если вы хотите отобразить целое значение, то можете написать так:

 
int x = 10;
Console.WriteLine(x); 

Чтобы отобразить строку, вы можете написать:

 
string message = "Hello";
Console.WriteLine(message); 

Даже несмотря на то, что вы передаете разные типы данных одному и тому же методу, оба эти примера успешно компилируются. Это объясняется тем, что существует множество методов Console.WriteLine(), каждый со своей сигнатурой, и один из них принимает в качестве параметра int, другой — string и так далее. Существует даже перегрузка этого метода с двумя параметрами, которая обеспечивает форматированный вывод и позволяет вам писать код вроде такого:

 
string Message = "Hello";
Console.WriteLine("The message is {0}", Message); 

Очевидно, что Microsoft поддерживает все эти методы Console.WriteLine(), потому что понимает, что существует множество различных типов данных, значения которых вы можете пожелать отобразить. Перегрузка методов очень удобна, но существуют некоторые ловушки, о которых следует помнить, используя их. Предположим, вы написали:

 
short y = 10;
Console.WriteLine(y); 

Заглянув в документацию, обнаруживаем, что ни одна перегрузка WriteLine() не принимает параметр типа short. Как же поступит компилятор? В принципе, он может сгенерировать код, преобразующий short в int, и вызовет версию int метода Console.WriteLine(). Или же он может конвертировать short в long и вызвать Console.WriteLine(long). Он может даже преобразовать short в string.

В упомянутой ситуации каждый язык руководствуется набором правил, выбирая способ преобразования, который применим в данном случае (для C# предпочтительным является преобразование в int). Однако здесь существует потенциальная опасность путаницы. По этой причине, если вы определяете перегрузки метода, то должны позаботиться о том, чтобы сделать это, исключая любые непредсказуемые результаты.


 

Добавить комментарий


Защитный код
Обновить