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

С# - Ватсон К.

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


>

return maxval;

)

static void Main(string!] args)

{

int[] myArray = Cl, 9, 3, 6, 2, 5, 9, 3, 0, 2);

int maxVal = MaxValue (iryArray) ;

Console.WriteLine('The maximum value in пуАггау is {0)', ntaxVal);

)

)

Эта функция может использоваться только для массивов значений тнпа int. Мы могли бы создать функции с другими именами, предназначенные для работы с параметрами других типов, переименовав вышеприведенную функцию как-нибудь вроде IntArrayMaxValue () И ДОбаВИВ фунКЦИИ Наподобие DoubleArrayMaxValue () для работы с другими типами. В качестве альтернативы мы можем просто включить в нашу программу следующую функцию:

static double MaxValue(double[] doubleArray)

{

double maxVal = doubleArray [0) j

for (int i » 1; i < double Array. Length; i++)

{

if (doubleArray[i] > maxVal) maxVal ¦ doubl- xrayti];

} ’ return maxval;

>

Разница между двумя функциями заключается в том, что эта функция работает со значениями типа double. Имя функции — MaxValueO — оказывается тем же самым, однако сигнатура (это принципиально) отличается. Было бы ошибкой описать две функции с одинаковым именем и одинаковой сигнатурой, однако поскольку в данном случае сигнатуры различны, то все нормально.

Теперь у нас имеются две версии функции MaxValueO, которые принимают массивы типа int и массивы типа double и возвращают максимальное значенне тнпа int илн типа double соответственно.

Красота такой формы программы в том, что не требуется явно указывать, которую нз этих двух функций мы собираемся использовать. Мы просто задаем массив-параметр, и это приводит к выполнению того варианта, который соответствует типу используемого параметра,

На данном этапе стоит отметить еще одну высокоинтеллектуальную черту VS. Если в нашем приложении имеются две одноименные функции, описанные выше, и мы наберем это имя, например, в Maino, то VS выведет доступные варианты перегрузки данной функции. Если будет набрано следующее:

double result = MaxValue(
128

Глейза 6

gjl of 2 h Int Clasal .MaxVaiue(int[] IntAirmy)

| 'tf>2 ol 2 yj double Claim 1 .MaxValua(douU»|] dti"1'1*Агт»у)|

то VS выведет информацию по обеим версиям функцин MaxValueO, которые мы можем просмотреть с помощью кнопок “стрелка вверх” и “стрелка вниз” (см. рис. слева).

При перегрузке функций учитываются все аспекты, касающиеся их сигнатур, Существует возможность, например, описать две различные функции, одна из которых принимает параметры по значению, а другая, соответственно, по ссылке:

static void showDouble(ref int val) ,

(

)

static void showDouble (int val)

(

>

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

ehowDoublelraf val) i ,

А такой вызов позволит передать параметр по значению: showOoublе{val})

Аналогичным образом можно описывать функции, отличающиеся числом требующихся нм параметров и т. п.

Делегаты

Делегатом называется тип, который позволяет хранить ссылки на функции. Несмотря на то что звучит это несколько интригующе, механизм, лежащий в основе этой возможности, удивительно прост. Наиглавнейшее предназначение делегатов вряд ли удастся понять до тех пор, пока вы не познакомитесь с событиями и с их обработкой, однако рассмотрение самого понятия делегатов принесет огромную пользу. Когда позднее наступит время их использовать, онн будут вам уже знакомы, что сделает некоторые сложные темы гораздо бехлее легкими для понимания.

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

Теперь, когда у нас имеется переменная, ссылающаяся на функцию, мы также получаем возможность выполнять и некоторые другие операции, которые не могут быть выполнены с использованием иных средств. Например, появляется возможность передавать переменную-делегат другой функции в качестве параметра, что позволит этой функции использовать данного делегата для вызова функции, на которую он ссылается, без необходимости определять вызываемую функцию до начала выполнения программы. Давайте рассмотрим пример.
Функции

129

Прантикун: использование делегата для вызова функции

1. Создайте новое консольное приложение с именем ch06Ex05 D директории С: \BegCSharpSChapter6,

2. Добавьте следующий код в classl.са: class Classl

{ .

НпТлтлК» ilnuhlo пягяга1 . Hnnhl^ гмглгоЛ i
Предыдущая << 1 .. 58 59 60 61 62 63 < 64 > 65 66 67 68 69 70 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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