Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

Int iPart;

fun(real, out iPart, out dPart);

Console.WriteLine("iPart={0}, dPart={1}",iPart, dPart);

}

}

Результат выполнения программы:

iPart=53, dPart=0,93

Необходимо отметить, что при больших значениях аргумента, заменяющего

параметр double x, величина (int) x может превысить предельное значение типа int.

Это приведёт к неверным результатам за счёт переполнения, о котором мы

говорили в главе 3.

9.3. Параметры с типами ссылок

Мы уже достаточно подробно на примерах рассмотрели возможности

параметров с типами значений. Отметили существенное различие их передачи по

значению и по ссылке. Разобрали два варианта передачи по ссылке – с применением

модификатора ref и с использованием модификатора out. Теперь остановимся на

особенностях параметров с типами ссылок "параметр:параметр с типами ссылок" .

Для них также возможна как передача по значению, так и передача по ссылке.

Если параметр с типом ссылки передаётся методу по значению, то в теле

метода создаётся копия использованного аргумента (копия ссылки). Эта копия

аргумента ссылается на какой-то внешний для метода объект и операторы тела

метода через ссылку могут изменить этот внешний объект. Пример:

// 09_07.cs – параметр с типом ссылки

using System;

class Program

{

static void sorting(int[ ] vector) // упорядочить массив

{

int t;

for (int i = 0; i < vector.Length - 1; i++)

for (int j = i+1; j < vector.Length; j++)

if (vector [i] > vector[j])

{ t = vector[i]; vector[i] = vector[j]; vector[j] = t; }

}

// Вывести вектор

static void arrayPrint(int[ ] a, string формат)

{

int i;

for (i = 0; i < a.Length; i++)

Console.Write(формат, a[i]);

}

static void Main()

{

int[ ] array = {1,4,8,2,4,9,3};

arrayPrint(array, "{0,6:d}");

Console.WriteLine( );

sorting(array);

Console.WriteLine("Измененный массив:");

arrayPrint(array, "{0,6:d}");

Console.WriteLine( );

}

}

Результат выполнения программы:

1 4 8 2 4 9 3

Измененный массив:

1 2 3 4 4 8 9

Метод sorting( ) в качестве аргумента, передаваемого по значению, должен

принимать ссылку на некоторый массив типа int[ ]. В теле метода выполняется

перестановка значений элементов того массива, ссылка на который использована в

качестве аргумента. Таким образом, метод изменяет внешний для него объект –

одномерный целочисленный массив.

Однако не следует считать, что метод sorting( ) принимает параметр vector по

ссылке. Этот параметр с типом ссылки на одномерный целочисленный массив

передаётся по значению.

Чтобы хорошо понять различие передач по значениям от передач по ссылкам

для параметров с типами ссылок, рассмотрим следующий пример. Пусть поставлена

задача обменять значения ссылок на два объекта-массива. Сделаем это двумя

способами. Определим очень похожие методы (программа 09_08.cs):

static void change1(int[ ] vec1, int[ ] vec2)

{

Int[ ] temp;

temp = vec1;

vec1 = vec2;

vec2 = temp;

}

static void change2(ref int[ ] vec1, ref int[ ] vec2)

{

Соседние файлы в папке CSBasicCourse2ndedPodbelsky