Необязательные аргументы и неоднозначность
В некоторых случаях компилятор может оказаться не в состоянии определить, какой именно вариант метода следует вызывать, когда необязательные аргументы не заданы.
static void OptArgMeth(int alpha, int beta = 10, int gamma = 20)
{
Console.WriteLine("Это аргументы alpha, beta и gamma: " +
alpha + " " + beta + " " + gamma);
}
static void OptArgMeth(int alpha, double beta = 10.0, double gamma = 20.0)
{
Console.WriteLine("Это аргументы alpha, beta и gamma: " +
alpha + " " + beta + " " + gamma);
}
С учетом этих вариантов перегрузки метода OptArgMeth() следующий его вызов приводит к неоднозначности.
OptArgMeth(1); // Ошибка из-за неоднозначности!
В некоторых случаях, возможно, придется отказаться от применения необязательных аргументов, чтобы исключить неоднозначность и тем самым предотвратить использование метода непреднамеренным образом.
Практический пример использования необязательных аргументов
//использовать необьязательный аргумент, чтобы упростить вызов метода.
using System;
class UseOptArgs
{
//вывести на экран символьную строку полнотью или частично.
static void Display(string str, int start = 0, int stop = -1)
{
if (stop < 0) stop = str.Length;
//поверить условие выхода за заданные пределы.
if (stop > str.Length | start > stop | start < 0) return;
for (int i = start; i < stop; i++) Console.Write(str[i]);
Console.WriteLine();
}
static void Main()
{
Display("это простой тест");
Display("это простой тест", 12);
Display("это простой тест", 4, 14);
}
}