Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
21.05.2015
Размер:
7.6 Кб
Скачать

В С# два или больше методов внутри одного класса могут иметь одинаковое имя, но при условии, что их параметры будут различными. Такую ситуацию называют перегрузкой методов (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, вызывается соответствующий конструктор. Перегружая конструктор класса, вы тем самым предоставляете пользователю этого класса определенную гибкость в выборе способа создания объектов.