Скачать презентацию Синтаксис С Касаткин Алексей Александрович УГАТУ 2014 Скачать презентацию Синтаксис С Касаткин Алексей Александрович УГАТУ 2014

Программирование - Лекция 2 (3 семестр).pptx

  • Количество слайдов: 14

Синтаксис С# Касаткин Алексей Александрович УГАТУ 2014 Синтаксис С# Касаткин Алексей Александрович УГАТУ 2014

Официальные опровежения Препроцессор в C# есть но #define N 5 писать нельзя , только Официальные опровежения Препроцессор в C# есть но #define N 5 писать нельзя , только #define N Переопределение операций тоже есть Cat operator+ (Cat a, Cat b) { return new Cat(); } Указатели есть в блоках unsafe (для совместимости) Все методы по умолчанию не виртуальные и переопределить их нельзя! Параметры функции обычно копируются при передаче, но для ссылочных типов это копии ссылок, а не объектов

Встроенные типы значений byte x = (1 << 7); x+=128; // 8 бит uint Встроенные типы значений byte x = (1 << 7); x+=128; // 8 бит uint y = (1 u << 31) + 1 u; // 32 бит Console. Write. Line("{0}, {1}", x, y); // 0, 2147483649 ushort us = 67000; // Compile Error short s = 32000+x; // Compile Error short=int ! short s = 20000; // 16 бит s *= 2; //checked {s=s*2} Console. Write. Line("s={0}", s); // -25536, ибо не лезет

Встроенные типы значений decimal d = 2. 7 M; // десятичное значение float df Встроенные типы значений decimal d = 2. 7 M; // десятичное значение float df = 2. 7 f; Console. Write. Line(df - 3 * 0. 9 f == 0); // False! Console. Write. Line(d - 3 * 0. 9 M == 0); // True! //double v = d; // Compile Error! double v = (double)d; v = v / 0; // никаких ошибок! Console. Write. Line(Double. Is. Infinity(v)); // True

Булев тип bool flag = 2 * 2 == 4 || test(); // True! Булев тип bool flag = 2 * 2 == 4 || test(); // True! , test() не вызывалось flag ^= true; // XOR True, ->False //int f = flag; // Compile Error! bool теперь не связан с числами! Булевы операции: || ИЛИ && И ^ XOR ! НЕ

Строка как ссылочный тип string txt = Строка как ссылочный тип string txt = "Hello!" , z =txt; txt += @"nn"; // замена ссылки! Console. Write. Line(z); // Hello! Console. Write. Line(txt); // Hello!nn Console. Write. Line("txt[1]={0}", txt[1]); // e // txt[1] = 'a'; // Compile Error (read only) Console. Write. Line("lo starts at txt[{0}]", txt. Index. Of("lo")); // 3

Одномерные массивы int[] a = new int[3]; // там нули! int[] b = a; Одномерные массивы int[] a = new int[3]; // там нули! int[] b = a; // копируется ссылка! int[] c = (int[]) a. Clone(); // копируется ссылка на копию! a[3] = 10; //Index. Out. Of. Range. Exception! a[2] = 8; Console. Write. Line("a=" + String. Join(", ", a)); // 0, 0, 8 Console. Write. Line("b=" + String. Join("--", b)); // 0 --0 --8 Console. Write. Line("c=" + String. Join("--", c)); // 0 --0 --0

Многомерные массивы int[, ] a 2 = { { 1, 2 }, { 3, Многомерные массивы int[, ] a 2 = { { 1, 2 }, { 3, 4 } }; // 2 D, в памяти одним блоком int[, , ] a 3 = {{{1}, {3}}, {{0}, {0}}}; // 3 D 2 x 2 x 1 //int[, , ] a 3 e = {{{1, 2}, {3, 4}}, {{0, 0}, {0}}}; //Error (length) – хочет 2 x 2 x 2 Console. Write. Line( "a 2[0, 1]=" + a 2[0, 1] ); // 2 Кстати: //new Array(); //Error-abstract class!

Массивы массивов int[][] x; //x[0][0] = 1; //Compile Error x = new int[2][]; // Массивы массивов int[][] x; //x[0][0] = 1; //Compile Error x = new int[2][]; // 2 ссылки на 1 D массивы x[0] = new int[] { 1, 2 }; x[1] = new int[] { 7, 8, 9 }; x[1] = x[0]; // 7, 8, 9 - в мусор x[0][1] = 3; Console. Write. Line(x[1][1]); // 3!

Структуры – тип значения (не ссылочный) struct XY { public int x; public int Структуры – тип значения (не ссылочный) struct XY { public int x; public int y; public double L { // СВОЙСТВО get {return Math. Sqrt(x*x+y*y); } } } XY p; p. x = 3; p. y = 4; Console. Write. Line(p. L); // 5 XY q = p; p. x = 0; // q не меняется, у нее своя память Console. Write. Line(q. L); // 5

Передача параметров в метод по значению class Cat{public string name = Передача параметров в метод по значению class Cat{public string name = "Barsik"; } void work(int x, int[] a, XY p, Cat c) { x = 7; // меняет КОПИЮ ЧИСЛА (X) a[0] = 7; // меняет СОДЕРЖИМОЕ массива по КОПИИ ССЫЛКИ (V) p. x = 7; // меняет СОДЕРЖИМОЕ СКОПИРОВАННОЙ СТРУКТУРЫ (X) c. name = "Tishka"; } // (V) меняет СОДЕРЖИМОЕ объекта по КОПИИ ССЫЛКИ

Передача параметров в метод по значению int xx = 0; int[] aa = { Передача параметров в метод по значению int xx = 0; int[] aa = { 0, 0 }; XY p = new XY(); Cat cc = new Cat(); work(xx, aa, p, cc); Console. Write. Line("{0} {1} {2} {3}", xx, aa[0], p. x, cc. name); // 0 7 0 Tishka

Передача параметров в метод по ссылке class Cat{public string name = Передача параметров в метод по ссылке class Cat{public string name = "Barsik"; } void work 2(ref int x, ref int[] a, ref XY p, ref Cat c) { // все заменяют переданные ссылки x = 1; // переприсваивает переданную ссылку на переменную a = new int[]{1, 1, 1}; p = new XY(); c = new Cat(); c. name = "Pushok"; }

Передача параметров в метод по ссылке int xx = 0; int[] aa = { Передача параметров в метод по ссылке int xx = 0; int[] aa = { 0, 0 }; XY p = new XY(); Cat cc = new Cat(); Cat cc_old = cc; work 2(ref xx, ref aa, ref p, ref cc); Console. Write. Line("{0} {1} {2} {3} {4}" , xx, aa[0], p. x, cc. name, cc_old. name); // 1 1 0 Pushok Barsik