ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Управление параметрамиВ С и С++ используется только передача аргументов по значению. В С# некоторые идеи по управлению данными взяты из 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; ……………………………………… } }
Не нашли, что искали? Воспользуйтесь поиском:
|