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

С# - Ватсон К.

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


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

¦tatic int HajWaZueidntU IntArray, out int maxTndex)

(

int maxval = intArray [01: naxlndex - 0;

for (int i * li i < intArray .Length; i++)

{

if (intArray[i] > maxVal)

maxVal = intArrayIlJj maxindex " i;

>

return maxVal;

)

Эта функция может быть использована таким образом:

int{] гоуArray - (1, 8, 3. 6, 2, 5, 9, 3, 0, 2)j int maxlndax)

CoiiBOle.WriteLin® ('The maximum value in ray Array is (0)', maxValue(myArray, out maxlndex))j Console.WriteLine("The first occurrence of this value is at element (0)', maxIndex + 1) j

Результатом ее выполнения будет следующее:

The maximum value in myArray is 9

(Ma ссимальное значение, содержащееся в массиве myArray,— 9)

The first occurrence of this value Is at element 7

(Первое вхождение с таким значением найдено в элементе 7)

Важным моментом, на который следует обратить внимание, является необходимость использовать ключевое слово out при вызове функцин (так же, как и ключевое слово ref).
Функции

117

Обратите внимание, что в тексте программы к значению переменной maxindex при выводе ее на экран прибавляется единица. Это сделано для того, чтобы придать индексу более удобную для восприятия форму, как если бы первый элемент массива считался элементом I, а не элементом 0.

Область действия переменных

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

Область действия переменной представляет собой очень важное понятие, которое лучше всего проиллюстрировать с помощью примера.

Практикум: описание и использование основной функции

1. Внесите следующие изменения в ciasol.co в приложении ch06Ex0i: class Classl

{

static void Write 0

Console.WriteLine{'inyString = {0}*, rnyString);

)

static void Main(string[] args)

- 1 ¦ --------------------------------------------------------------------------------

string nyStrinB = 'String defined 1л Main!) *;

WriteO )

)

)

2. Откомпилируйте код и обратите внимание на сообщение об ошибке и на предупреждение, которые появятся в списке заданий:

The name 'myString' does not exist in the class or namespace 'Ch06Ex01 .Classl *

(В данном классе или пространстве имен ‘Ch06Ex01.Classl’ имя ‘myString’ отсутствует

The variable 'myString' is assigned but its value is never used

Переменой ‘myString’ присваивается значение, но оно нигде не используется)

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

Итак, что в данном случае неправильно? А то, что переменная mystring, описанная в основном теле приложения (в функции MainO), оказывается недоступной В функции write!).

Причина этой недоступности кроется в том, что у переменных имеется область, внутри которой их использование является допустимым. Эта область распространяется на тот блок кода, в котором они описаны, и на все непосредственно вложенные в него блоки кода. Блоки кода функций отделены от блоков кода, из которых они вызываются. Поэтому внутри функции write!) имя myString не считается определенным, а переменная mystring, определенная в функции Main О, оказывается вне области своего действия: она может использоваться только в рамках функции Kain().
118

Глава 6

На самом деле в функции write о мы могли бы использовать совершенно другую переменную mystring. Попробуйте внести а программу следующие изменения:

claaa Classl (

static void Write О (

Bering nvString = 'String defined in Write()*;

Console.WriteLine('Non In

Console,WriteLine('myString = (0)', rayString);

>

static void Mainfstring[1 args)

(

string myStrino = 'String defined in MainO

Write О(

Console.WriteLine(*\nNow in HainO*) ;

Console.WriteLine('myString * (0}', myString);

}

}

Этот код успешно проходит процедуру компиляции и выдает следующий результат:

Данная программа выполняет следующие действия: -

? В функции Maino описывается и инициализируется переменная с именем myString.

? Функция Main() передает управление функции write)).

? В функции write () описывается и инициализируется переменная с именем mystring, отличная от переменной с именем myString, описанной в функции Main().

? Функция write о выводит на консоль строку, содержащую то значение переменной myString, которое ей присвоено в функции write().

? Функция write о возвращает управление функции Maino.

? Функция Main о выводит на консоль строку, содержащую то значенне переменной myString, которое ей присвоено в функцин Maino.
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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