Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 65

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 404 >> Следующая


Static double Multiply (double paraml, double param2)

(

return paraml * param2;

)

static double Divide{double paraml, double peram2)

{

return paraml / paramli static void Main{string[] args)

( ........... ..............

processDelegate processj

Console.WriteLine (*En'ir 2 numbers separated with а сопки:*) j string input = Console.ReadLineO; int commaPas • input. IndexOf {¦, * > i

double paraml = Convert.ToDouble(input.Substring(0, commaPae)); double рагатЗ = Convert .ToDouble{input. Substring (coikmPos + 1,

input.Length - сотпаРое - 1)) ; Console. WriteLine (’Enter M to multiply or D to divide:*); iAput = Console.ReadLineO j if (input *>¦ *M“)

process ¦ new proceseDelegate (Multiply) ; else -

process = new processDelegate(Divide))

Console.WriteLine(*Result: {*, process(paraml, param2)>;

>

3. Запустите программу:

pv G:\EtefiC 5 harjj \ th a ptei-6\Cli Li 6EhD5\b i n\D eb ш8\ С i lOQEkQ !>. i ж

1ГИ IH!( illfr iL:. ¦ . : I, l :¦ .1 (|Ull I СИПГМ-

7*2r(, .2

Ed let; l J1 : a iqu Lt ipXy " ¦' U ' ¦ ili'ji Lde :

H

lVs?53 -ту K;y lu tuntiriiiti

iff!

J ....................... ..........................'J±

Как это работает

Этот код описывает делегата (processDelegate), сигнатура которого совпадает с сигнатурой двух функций: Multiply о и Divide о. Делегат имеет следующее определение:

delegate double processDelegate (double paraml, double param2) ;

Ключевое слово delegate указывает, что данное определение является определением делегата, а не функции (это определение располагается в том же месте
130 Глава 6

программы, где могло бы находиться и определение функции). Далее приводится сигнатура, в которой задаются возвращаемое значение типа double и два параметра типа double. Используемые в сигнатуре имена являются произвольными, поэтому тип делегата и имена параметров мы можем выбирать по своему усмотрению. В данном случае мы выбрали имя делегата processDelegate, а параметры назвали paraml И par am 2,

Код функции Main о начинается с того, что мы объявляем переменную, воспользовавшись описанным типом делегата:

static void Main(string[] args)

(

processDelegate process;

Затем следует абсолютно стандартный для C# код, который запрашивает два числа, разделенные запятой, и присваивает их двум переменным типа double:

Console.WriteLine('Enter 2 numbers separated with a comma:'); string input = Console.KeadliineO t int coirroaPos = input.IndexOf(',');

double paraml = Convert .ToDouble (input.Substring (0, comntaPos)) ; double param2 = Convert,ToDouble (input .Substring(coimnaPos + 1,

input,Length - commaPos - 1));

Обратите внимание, что для наглядности в программу не включены никакие проверки допустимости вводимой пользователем информации. В реальной программе нам пришлось бы потратить большое количество времени, проверяя допустимость тех значений, которые мы получаем для локальных переменных paraml и рагат2.

Затем мы запрашиваем пользователя, следует ли умножать или делить эти числа:

Console.WriteLine('Enter М to multiply or D to divide:'); input = Console.ReadLine();

В зависимости от полученного ответа мы инициализируем переменнуга-делегат:

if (input == 'М')

process = new processDelegate(Multiply); else

process = new processDelegate(Divide);

Для присвоения перемеииой-делегату ссылки на функцию нам приходится использовать несколько странно выглядящий синтаксис. Так же, как и в случае присваивания значений массиву, для создания нового делегата используется ключевое слово new. После этого слова указывается тип создаваемого делегата и задается параметр, определяющий ту функцию, которую мы хотим использовать, а именно функцию Console.WriteLine о, Обратите внимание, что этот параметр не совпадает ни с параметрами типа делегата, ни с параметрами используемой функции: это уникальный синтаксис, применяемый исключительно для осуществления присваивания делегату. В качестве параметра используется просто имя той функции, которую необходимо использовать, без скобок.

Наконец, мы вызываем выбранную нами функцию с помощью делегата. Здесь применяется один и тот же синтаксис, независимо от того, на какую именно функцию ссылается делегат:

Console.WriteLine('Result: (0}', process(paraml, param2));

)
В данном случае мы обращаемся с переменной-делегатом так, как если бы она представляла собой имя функции. Однако, в отличие от функций, над этой переменной можно выполнять некоторые дополнительные операции, например, передачу ее другой функции в качестве параметра. Простой пример такого использования может выглядеть примерно следующим образом:

static void executeFuncCion(proceseDeleflate process)

{

process(2.2, 3.3);

3

Это означает, что мы получаем возможность управлять поведением функций, передавая им в качестве параметров делегатов функций, что во многом напоминает выбор используемого (snap-in). Например, может иметься функция, используемая для сортировки строкового массива по алфавиту. Существуют различные алгоритмы сортировки списков, обладающие различным быстродействием, что зависит от характеристик сортируемого списка. С помощью делегатов мы получаем возможность определять метод, который необходимо использовать, передавая функции, выполняющей сортировку, делегата той функции, в которой реализован соответствующий алгоритм сортировки.
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.