Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

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

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

Подобно другим объектно-ориентированным языкам, язык C# позволяет типу перегружать его методы. Говоря простыми словами, когда класс имеет несколько членов с одинаковыми именами, отличающихся только числом (или типом) параметров, соответствующий член называют перегруженным. В классе Employee перегруженным является конструктор класса, поскольку предложены два определения, которые отличаются только наборами параметров.

public class Employee {
 ...
 // Перегруженные конструкторы.
 public Employee(){}
 public Employee(string fullName, int empID, float currPay) {…}
 ...
}

Конструкторы, однако, не являются единственными членами, допускающими перегрузку. Продолжив рассмотрение текущего примера, предположим, что у нас есть класс Triangle (треугольник), который поддерживает перегруженный метод Draw(). С его помощью пользователю объекта позволяется выполнить визуализацию изображений, используя различные входные параметры.

public class Triangle {
 // Перегруженный метод Draw() .
 public void Draw(int x, int y, int height, int width) {…}
 public void Draw(float x, float y, float height, float width) {…}
 public void Draw(Point upperLeft, Point bottomRight) {…}
 public void Draw(Rect r) {…}
}

Если бы в C# не поддерживалась перегрузка методов, вы были бы вынуждены создать четыре члена с уникальными именами, что, как можете убедиться, весьма далеко от идеала.

public class Triangle {
 // Глупость
 public void DrawWithInts(int x, int y, int height, int width) {…}
 public void DrawWithFloats(float x, float y, float height, float width) {…}
 public void DrawWithPoints(Point upperLeft, Point bottomRight) {…}
 public void DrawWithRect(Rect r) {…}
}

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

public class Triangle {
 …
 // Ошибка! Нельзя перегружать методы
 // на основе возвращаемых значений!
 public float GetX(){…}
 public int GetX(){…}
}

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


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