Управление параметрами. Пример. Массивы и строки


В С и С++ используется только передача аргументов по значению. В С# некоторые идеи по управлению данными взяты из Pascal’я и, т.о., приняты меры к увеличению надежности программ. Аргументы простого типа данных передается по значению. Объекты классов передаются по ссылке.

Пример

Пусть имеется класс Test и в нем декларированы два свойства – a и b типа int и метод change(), следующего вида:

public void change (Test ob)

{

ob.a = ob.a + ob.b;

ob.b = - ob.b;

}

Тогда передача по ссылке происходит следующим неявным образом:

Test ob = new Test(15, 20);

ob.change(ob);

Модификаторы типа параметров – ref и out обеспечивают более гибкое управление передачей аргументов.

Пример

class RefTest

{

public void sqr(ref int i)

{ i = i * i; }

…………………………….

}

…………………………….

RefTest ob = new RefTest();

int a = 10;

ob.sqr(ref a); // ref срабатывает как оператор и вычисляет адрес переменной а

После вызова метода а имеет значение равное 100.

Модификатор out обеспечивает получение из метода некоторого значения. Out-аргумент не должен быть связан до вызова метода с каким-либо значением.

Пример

class Decompose

{

public int parts(double n, out double frac)

{

int whole;

whole = (int)n;

frac = n – whole;

return whole;

}

…………………………………….

}

class UseOut

{

public static void Main()

{

Decompose ob = new Decompose();

int i; double f;

i = ob.parts(10.125, out f);

Console.WriteLine(“Целая часть числа = ” + i);

Console.WriteLine(“Дробная часть равна = ” + а);

}

}

Один из классов в программе должен иметь метод Main(), с которого начинается выполнение программы.

Ref и out можно применять и к объектным параметрам. Фактически это соответствует передаче ссылки по ссылке и удобно, например для выполнения свопинга (взаимозамены) объектов.

Методы, конструкторы и операторы в С# можно перегружать. Также как в С++ компилятор различает их по сигнатуре и знает в какой точке программы выполнить правильный их выбор.

В методе может передаваться переменное число аргументов. Это указывается с помощью модификатора params.

Пример

…………………………

public int minVal(params int[] nums)

{

……………………………….

if (nums.Length == 0)

{………………………}

}

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

 

Массивы и строки

Отличия при работе с массивами и строками в C# по сравнению с C++ - существенны. Массивы и строки создаются как объекты. Размеры и размерность массивов указываются сразу после указания типа элементов. Границы массивов в вычислениях автоматически контролируются.

Пример

int [,] table = new int[10, 20];

int [] nums = {99, 10, 100};

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

В С# допускается 2-мерные массивы с рваными краями. (Самостоятельно!)

Свойство Length позволяет выяснить число элементов в массиве или в строке массива.

Цикл foreach обеспечивает работу с коллекциями, одним из представителей которых является массив.

Пример

int sum = 0;

int [] nums = new int [10];

foreach(int x in nums)

sum += x; // x последовательно принимает значения элементов из массива nums

 

Строки в С# являются представителями типа данных string. Так же как и массивы строки – ссылочный тип данных. Строки можно сравнивать (==, !=, …), сцеплять с помощью оператора «+», копировать (метод Copy) и т.д.

Пример

char [] chararray = “test”;

string str = new string (chararray); // создание строки из массива типа char

 

Строки можно использовать в операторе switch.

Пример

string [] strs = {“один”, “два”, …};

……………………………………

foreach(string s in strs)

{

switch(s)

{

case “”:

Console.Write(1);

break;

case “”:

Console.Write(2);

break;

………………………………………

}

}

 



Дата добавления: 2016-05-26; просмотров: 1245;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.