Книга: C# для профессионалов. Том II

Перезагрузка методов

Перезагрузка методов

Тот факт, что для класса Manager было предоставлено два конструктора, иллюстрирует принцип перезагрузки методов в C#, в соответствии с которым предполагается, что класс имеет более одного метода с одним именем, но эти методы имеют различное число параметров. Мы продемонстрировали перезагрузку конструкторов, но точно такие же принципы применимы ко всем методам.

Не путайте термины перезагрузка и переопределение методов. Это различные и никак не связанные концепции.

Когда компилятор встречает вызов перезагруженного метода, он проверяет передаваемые параметры, чтобы определить, какой метод необходимо вызвать. В случае создания объекта менеджера, так как один конструктор получает три параметра, а другой только два, то компилятор прежде всего проверит число параметров. Следовательно, если написать:

Manager SomeManager = new Manager("Name", 300000.00M);

компилятор будет использовать для создания экземпляра объекта  Manager конструктор с двумя параметрами, то есть bonus будет присвоено значение по умолчанию, равное 100000M. Если, с другой стороны, написать:

Manager SomeManager = new Manager("Name", 300000.00М, 50000.00М);

компилятор использует конструктор с тремя параметрами, поэтому bonus получит указанное значение 50000.00М. При наличии нескольких доступных перезагружаемых версий компилятор не сможет найти подходящую и проинициирует ошибку компиляции. Например, если написать.

Manager SomeManager = new Manager(100, 300000.00М, 50000.00М); // неправильно

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

Наконец, отметим, что C# не разрешает методам использовать параметры по умолчанию, как это делает VB. Однако легко получить тот же самый эффект с помощью перезагрузки методов, как это сделано в нашем примере. Обычный способ состоит просто в использовании перезагруженных версий, которые имеют меньше параметров, чтобы подставить значения по умолчанию для оставшихся параметров и затем вызывать другие перезагружаемые версии.

Оглавление книги


Генерация: 2.417. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз