Перегрузка методов
Перегрузка методов
Подобно другим объектно-ориентированным языкам, язык 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(){…}
}