Читаем C# 4.0 полное руководство - 2011 полностью

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);

}

Обратите внимание на то, что единственное отличие в обоих вариантах рассматриваемого здесь метода состоит в типах параметровbetaиgamma,которые оказываются необязательными. В первом варианте оба параметра относятся к типуint,а во втором — к типуdouble.С учетом этих вариантов перегрузки методаOptArgMeth следующий его вызов приводит к неоднозначности.

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("3TO простой тест", 4, 14);

}

}

Выполнение этой программы дает следующий результат.

это простой тест тест

простой те

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT