OptArgMeth(1); // Ошибка из-за неоднозначности! Этот вызов приводит к неоднозначности потому, что компилятору неизвестно, ка кой именно вариант данного метода использовать: тот, где параметры beta и gamma имеют тип int, или же тот, где они имеют тип double. Но самое главное, что конкрет ный вызов метода OptArgMeth может привести к неоднозначности, даже если она и не присуща его перегрузке. В связи с тем что перегрузка методов, допускающих применение необязательных аргументов, может привести к неоднозначности, очень важно принимать во внимание последствия такой перегрузки. В некоторых случаях, возможно, придется отказаться от применения необязательных аргументов, чтобы исключить неоднозначность и тем самым предотвратить использование метода непреднамеренным образом. ### Практический пример использования необязательных аргументов Для того чтобы показать на практике, насколько необязательные аргументы упро щают вызовы некоторых типов методов, рассмотрим следующий пример программы. В этой программе объявляется метод Display, выводящий на экран символьную строку полностью или частично.
// Использовать необязательный аргумент, чтобы упростить вызов метода. 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); } } Выполнение этой программы дает следующий результат.