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

Язык C# позволяет создавать несколько методов с одинаковыми именами, но разными параметрами. Компилятор автоматически подберёт наиболее подходящий метод при построении программы. Например, можно написать два отдельных метода возведения числа в степень: для целых чисел будет применяться один алгоритм, а для вещественных – другой:

/// <summary>

/// Вычисление X в степени Y для целых чисел

/// </summary>

private int Pow(int X, int Y)

{

int b = 1;

while (Y!= 0)

if (Y % 2 == 0)

{

Y /= 2;

X *= X;

}

else

{

Y--;

b *= X;

}

return b;

}

/// <summary>

/// Вычисление X в степени Y для вещественных чисел

/// </summary>

private double Pow(double X, double Y)

{

if (X!= 0)

return Math.Exp(Y * Math.Log(Math.Abs(X)));

else if (Y == 0)

return 1;

else

return 0;

}

Вызывается такой код одинаково, разница лишь в параметрах – в первом случае компилятор вызовет метод Pow с целочисленными параметрами, а во втором – с вещественными:

Pow(3, 17);

Pow(3.0, 17.0);

Параметры по умолчанию

Язык C# начиная с версии 4.0 (Visual Studio 2010) позволяет задавать некоторым параметрам значения по умолчанию – так, чтобы при вызове метода можно было опускать часть параметров. Для этого при реализации метода нужным параметрам следует присвоить значение прямо в списке параметров:

private void GetData(int Number, int Optional = 5)

{

Console.WriteLine("Number: {0}", Number);

Console.WriteLine("Optional: {0}", Optional);

}

В этом случае вызывать метод можно следующим образом:

GetData(10, 20);

GetData(10);

В первом случае параметр Optional будет равен 20, так как он явно задан, а во втором будет равен 5, т.к. явно он не задан и компилятор берёт значение по умолчанию.

Параметры по умолчанию можно ставить только в правой части списка параметров, например, такая сигнатура метода компилятором принята не будет:

private void GetData(int Optional = 5, int Number)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: