Ответы по Технологии программирования / Перегрузка методов
.docxВ С# два или больше методов внутри одного класса могут иметь одинаковое имя, но при условии, что их параметры будут различными. Такую ситуацию называют перегрузкой методов (methodoverloading), а методы, которые в ней задействованы, — перегруженными (overloaded). Перегрузка методов — один из способов реализации полиморфизма в С#.
В общем случае для создания перегрузки некоторого метода достаточно объявить ещё одну его версию. Однако все перегруженные методы должны иметь списки параметров, которые отличаются по типу и/или количеству. Методам для перегрузки недостаточно отличаться лишь типами возвращаемых значений. Они должны отличаться типами или числом параметров. Конечно, перегруженные методы могут отличаться и типами возвращаемых значений. При вызове перегруженного метода выполняется та его версия, параметры которой совпадают (по типу и количеству) с заданными аргументами.
using System;
class Overload {
public void ovlDemo() {
Console.WriteLine("Без параметров");
}
// Перегружаем метод ovlDemo() для одного
// целочисленного параметра,
public void ovlDemo(int a) {
Console.WriteLine("Один параметр: " + a);
}
// Перегружаем метод ovlDemo() для двух
// целочисленных параметров,
public int ovlDemo(int a, int b) {
Console.WriteLine("Два int-параметра: " + a + " " + b);
return a + b;
}
// Перегружаем метод ovlDemo() для двух
// double-параметров.
public double ovlDemo(double a, double b) {
Console.WriteLine("Два double-параметра: " +
a + " "+ b ) ;
return a + b;
}
}
classOverloadDemo {
public static void Main() {
Overload ob = new Overload();
int resl;
double resD;
// Вызываем все версии метода ovlDemo().
ob.ovlDemo();
Console.WriteLine();
ob.ovlDemo(2);
Console.WriteLine();
resl = ob.ovlDemo(4, 6);
Console.WriteLine("Результат вызова ob.ovlDemo(4, 6):”
+ resl);
Console.WriteLine();
resD = ob.ovlDemo(1.1, 2.32);
Console.WriteLine("Результат вызова ob.ovlDemo(1.1, 2.2):”+resD);
}}
Посредством перегрузки методов в С# поддерживается полиморфизм, поскольку это единственный способ реализации в С# парадигмы "один интерфейс — множество методов".
Подобно другим методам, конструкторы также можно перегружать. Это позволяет создавать объекты различными способами.
using System;
class MyClass {
public int x;
public MyClass() {
Console.WriteLine("Внутри конструктора MyClass().");
x = 0;
}
publicMyClass(int i) {
Console.WriteLine("Внутри конструктора MyClass(int).");
x = i ;
}
public MyClass(double d) {
Console.WriteLine(
"Внутри конструктора MyClass(double).");
x = (int) d;
}
public MyClass(inti, int j) {
Console.WriteLine(
"Внутри конструктораMyClass(int, int).");
x = i * j ;
}}
class OverloadConsDemo {
public static void Main() {
MyClass tl = new MyClass ();
MyClass t2 = new MyClass(88);
MyClass t3 = new MyClass(17.23);
MyClass t4 = new MyClass(2, 4);
Console.WriteLine("tl.x: " + tl.x);
Console.WriteLine("t2.x: " + t2.x);
Console.WriteLine("t3.x: " + t3.x);
Console.WriteLine("t4.x: " + t4.x);
}}
Конструктор MyClass () перегружен четырежды, и все конструкторы создают объекты по-разному. В зависимости от того, какие параметры заданы при выполнении оператора new, вызывается соответствующий конструктор. Перегружая конструктор класса, вы тем самым предоставляете пользователю этого класса определенную гибкость в выборе способа создания объектов.