Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type


НазваІнформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type
Дата конвертації06.04.2013
Розмір445 b.
ТипІнформації


Тема №3

  • Базові можливості C#


Загальний огляд системи типів

  • Всі типи поділяються на дві категорії: Value Type та Reference Type.

  • На вершині ієрархії – клас System.Object, тобто всі типи є його нащадками - прямо чи опосередковано. Ряд методів, в т.ч. GetType(), ToString(),

  • Повні імена та псевдоніми. Наприклад, char та System.Char.

  • Це ж стосується і таких типів, як System.String та System.Object, хоч вони і Reference Type.

  • Елементарні типи (?) – для яких є прості імена, і які підтримуються компілятором напряму.

  • Змінні категорії Reference Type ведуть себе подібно до вказівникових типів.

  • Чи є в C# вказівники?



Приклад unsafe-коду

  • unsafe static void Main(string[] args)

  • {

  • int i = 12;

  • int* p = &i;

  • (*p)++;

  • Console.WriteLine(i); //13

  • Console.ReadLine();

  • }



Value Types

  • Вбудовані типи.

  • Типи, які визначаються користувачем: перелічення (enum) та структури (struct).



Отримання інформації про типи

  • Оператор is – перевірка того, чи має певний об’єкт той чи інший тип.

  • Reflection – отримання детальної інформації про тип. Центральне місце – клас System.Type, екземпляр якого можна отримати за допомогою методу GetType() (це метод класу Object).

  • Оператор typeof(тип) – отримання екземпляра класу Type для заданого типу.



Приклад

  • var iv = new int(); // Можна поводитися як з класами

  • iv = 2;

  • Console.WriteLine(iv);

  • // Simple Reflection

  • if (iv is object) Console.WriteLine("Так, це об'єкт");

  • if (iv is string) Console.WriteLine("Так, це рядок");

  • else Console.WriteLine("Ви чого, дядьку - це ж не рядок");

  • Type ti = iv.GetType();

  • Console.WriteLine(ti);

  • Console.WriteLine(ti.Name);

  • Type tit = typeof(int);

  • Console.WriteLine(tit.BaseType); // ValueType







Деякі особливості літералів

  • 16-кові – на початку 0х.

  • Беззнакові – в кінці U.

  • Decimal – в кінці М.

  • Довгі цілі – в кінці L.

  • Символьні літералив одинарних лапках, рядки – в подвійних.

  • Символьні літерали можна задавати Unicode-кодом, напр., ‘\u0041’. Годиться і ‘\x0041’.



Перетворення типів

  • “Класичне” перетворення – буде наведений приклад.

  • Оператор as – “безпечне” перетворення.

  • Існують правила неявного перетворення.

  • Перетворення між bool та int немає!



Правила просування типів у виразах

  • Якщо один операнд є decimal, то і інший піднімається до decimal (але несумісно з float та double). Інакше:

  • Якщо один операнд є double, то і інший піднімається до double. Інакше:

  • Якщо один операнд є float, то і інший піднімається до float. Інакше:

  • Якщо один операнд є ulong, то і інший піднімається до ulong ( несумісно зі знаковими цілочисельними типами). Інакше:

  • Якщо один операнд є long, то і інший піднімається до long. Інакше:

  • Якщо один операнд є uint, а інший – sbyte, short, int то і обидва перетворюються на long. Інакше:

  • Якщо один операнд є uint, то і інший піднімається до uint.

  • Інакше: обидва операнди перетворюються на int (правило integer promotion).



Перетворення типів – приклад №1

  • byte b1 = 2;

  • byte b2 = 3;

  • // byte br = b1 + b2; - помилка компіляції

  • byte br = (byte) (b1 + b2);



Перетворення типів – приклад №2

  • int i = 'A';

  • Console.WriteLine(i); // 65

  • char c = (char) 97;

  • Console.WriteLine(c); //a



Перетворення типів – приклад №3

  • char cc1 = 'd';

  • char cc2 = (char)1;

  • char cc = (char)(cc1 + cc2); //e



Змінні

  • Опис і використання – традиційні.

  • Нове в C# 3.0 – можливість оголошення var.

  • Для опису констант – модифікатор const.

  • Є також модифікатор readonly. Для полів класів, які можуть змінюватися лише в їх конструкторах.

  • Змінні перед першим використанням повинні бути проініціалізовані! Але елементи масивів і поля класів автоматично ініціалізуються значеннями за замовченням.

  • Область дії змінної – блок, але вона не може повторно визначатися в підблоках!!!



Так не можна

  • {

  • int ib = 5;

  • {

  • int ib = 6;

  • Console.WriteLine(ib);

  • }

  • }



Перетворення типів: очевидне-неймовірне

  • int i = 1;

  • long l = 1;

  • Console.WriteLine(i.Equals(l)); //False

  • Console.WriteLine(l.Equals(i)); //True



Nullable-типи і поглинання null - приклад

  • int? a = null;

  • int c;

  • c = a ?? 10; //10

  • a = 5;

  • c = a ?? 10; //5



Перелічувані типи - приклад

  • enum Auto { Slavuta, Ferrari, Mersedes, Lada, Moped }

  • Auto av = Auto.Slavuta;

  • Console.WriteLine(av);

  • Або:

  • Auto av = (Auto) 0; - сумісність з цілочисельними значеннями



Основні оператори



Основні інструкції C#

  • коментарі

  • if

  • while

  • do

  • foreach

  • goto

  • break

  • continue

  • switch

  • return



Коментарі – три типи

  • // - однорядковий коментар

  • /* - багаторядковий коментар

  • /// - коментар для створення документації (прохання познайомитись з цією можливістю самостійно)



Приклад if

  • //If statement

  • bool b = true;

  • int r;

  • if (b) { r = 1; }

  • else { r = 0; }

  • Console.WriteLine("b is {0} => r is {1}",b,r);

  • // ще раз про підстановки

  • Console.ReadLine();



Приклад while (цикл з передумовою)

  • int i = 0;

  • while (i < 10) { Console.Write(i+" "); i++; }



Приклад do (цикл з постумовою)

  • int k = 0;

  • do { Console.Write(k + " "); k++; } while (k < 10);



Приклад for

  • int[ ] M = { 1, 5, 9 };

  • int L = M.Length;

  • for (int l = 0; l < L; l++)

  • {

  • Console.Write(M[l] + " ");

  • }



Приклад foreach для масивів

  • //Foreach for arrays

  • foreach (int mm in M)

  • {

  • Console.Write(mm + " ");

  • }



Приклад LINQ (з 3.0)

  • var numbers = new int[ ] {1, 4, 9, 16, 25};

  • // Отримуємо парні числа, поділені навпіл:

  • var evens = from p in numbers

  • where (p %2) == 0

  • select p/2;

  • foreach (var v in evens) …



Приклад foreach для колекцій

  • List numbers = new List ();

  • for (int ik = 0; ik < 10; ik++)

  • {

  • numbers.Add(ik);

  • }

  • foreach (int ikl in numbers)

  • {

  • Console.Write(ikl + " ");

  • }



Приклад foreach для рядків

  • //Foreach for strings

  • String S = "qwerty";

  • foreach (char c in S)

  • {

  • Console.Write(c + " ");

  • }



Jump - інструкції

  • Є оператор переходу goto.

  • Інструкції break та continue – помітних особливостей у порівнянні з С немає.

  • return.



Приклад switch: для перелічуваних типів

  • String Message;

  • switch (av)

  • {

  • case Auto.Slavuta: Message = "Крута тачка"; break;

  • case Auto.Mersedes: Message = "Навіщо Вам та колимага?"; break;

  • default: Message = "Не розумію..."; break;

  • }



Особливості switch

  • Заборонені “провали” (крім випадків пустих case-інструкцій).

  • Порядок case-розділів не має значення. Зокрема, default може бути де завгодно.

  • В case-розділах можуть використовуватися цілочисельні типи (включно з char та enum) і тип string.



Масиви

  • Вказівниковий тип.

  • Оголошення int[ ] M створює лише вказівник, а не сам масив; операція М1=М2 – це лише копіювання вказівників!

  • Базовий тип – Array. В ньому – корисні методи для копіювання (Copy), сортування (Sort), обернення масивів (Reverse), пошуку елемента в масиві (IndexOf) і т.п.

  • Довжина масиву – M.Length.



Три типи масивів

  • одновимірні масиви;

  • “традиційні”, “прямокутні” масиви;

  • нерівні” масиви; масиви масивів. Відмінність від прямокутних – навіть на рівні синтаксису.



Ініціалізація одновимірних масивів

  • int[ ] M = new int[4];

  • Або: int[ ] M = { 1, 4, 9, 16};



Приклад ініціалізації прямокутних масивів

  • int R[ , ] = { {1,3,5}, {10,30,50}};



Приклад ініціалізації “нерівних” масивів

  • int [ ] [ ] R = new int[2][ ] {

  • new int[ ] {1,3,5},

  • new int[ ] {10,20}

  • };

  • Console.WriteLine (R[0][1])

  • (R[0,1] не проходить).



Виключення

  • Типовий механізм для обробки неординарних, виняткових ситуацій.

  • try – catch – finally.



Простий приклад виключення

  • try

  • {

  • S = Console.ReadLine();

  • int i = int.Parse(S);

  • Console.WriteLine("Result is " + i * 2);

  • }

  • catch (FormatException e) { Console.WriteLine(e.Message); //Або StackTrace

  • }

  • catch (Exception) { Console.WriteLine("Error"); }

  • finally {

  • Console.WriteLine("Thank you");

  • }



Виключення: на що слід звернути увагу

  • На вершині ієрархії – клас System.Exception.

  • Може бути декілька блоків catch.

  • Спочатку слід перехоплювати менш загальні виключення, а потім більш загальні – інакше помилка компіляції.

  • Для catch може бути різний синтаксис – catch(Ex-n e) або catch(Ex-n). Можна і просто catch – для найбільш загального виключення.

  • Блоки try можуть бути вкладеними.

  • Генерація виключення – throw new Exception();

  • Можна створювати власні виключення. Прохання ознайомитися з цією можливістю самостійно.



checked та unchecked

  • Секція checked - додатковий контроль за виключеннями переповнення, які за замовченням не генеруються.

  • unchecked (діє за замовченням) – відключення такого контролю; типове використання – в області дії checked.



Приклад використання checked

  • byte S;

  • try

  • {

  • checked

  • {

  • S = 250;

  • S += 10;

  • Console.WriteLine(S); // без checked було б 4

  • }

  • }

  • catch (Exception e) { Console.WriteLine(e.Message); }



Ще одна форма

  • checked/unchecked (expression)

  • Наприклад:

  • result = checked ((byte) (a+b));



Деякі особливості методів

  • Механізм передачі параметрів.

  • Змінна кількість параметрів.



Передача параметрів

  • Способи передачі параметрів - in, ref, out.

  • in (за замовченням) – передача за значенням; для Reference Type – за значенням передається посилання на об’єкт.

  • Модифікатор ref (і в оголошенні, і при виклику) – відповідний параметр передається за посиланням. Метод отримує значення цього параметра.

  • Модифікатор out – передача за посиланням; метод значення не отримує. Типове використання – для отримання результуючих змінних; зокрема, якщо ці змінні до виклику ще не ініціалізовані.



Приклад 1 – знаходження суми

  • static void Metod(int a, int b, out int S)

  • {

  • S = a + b;

  • }

  • static void Main(string[] args)

  • {

  • int a = 5;

  • int b = 10;

  • int Q;

  • Metod(a, b, out Q);

  • Console.WriteLine(Q);

  • Console.ReadLine();

  • }



Приклад 2 – обмін посилань

  • Метод, який міняє між собою два посилання на екземпляри певного класу (крім string або value type), які передаються цьому методу як параметри. Для передачі параметрів слід використовувати модифікатор ref.



Змінна кількість параметрів - приклад

  • static int Sum(params int[ ] pars)

  • {

  • int M = 0;

  • foreach (int q in pars) { M += q; }

  • return M;

  • }

  • static void Main(string[ ] args)

  • {

  • Console.WriteLine(Sum(5, 7,2));

  • Console.ReadLine();

  • }



Рядки

  • Клас System.String (або string).

  • Рядки є незмінюваними (як і в Java). Змінювані – клас System.Text.StringBuilder.

  • Довжина рядка – властивість Length.

  • Важливі операції: конкатенація (+), індексація ([ ]), порівняння (==).

  • Символ @.

  • Багато методів: пошук символа (IndexOf), виділення підрядка (Substring) і т.п.

  • Методи Split та Join – розщеплення та з’єднання рядка.

  • Засоби форматування рядків (метод String.Format).

  • Регулярні вирази (System.Text.RegularExpressions).



Приклад використання Split та Join

  • Console.WriteLine("Enter your string");

  • String S = Console.ReadLine();

  • char[ ] delim = {' ', '-', ',', '.'};

  • String[ ] arr = S.Split(delim, System.StringSplitOptions.RemoveEmptyEntries);

  • for (int i=0; i

  • {

  • arr[i]=arr[i].ToUpper();

  • }

  • String Res = String.Join(":", arr);



Регулярні вирази: перевірка коректності електронної адреси

  • String ln = Console.ReadLine();

  • Regex reg = new Regex(@"\w+@\w+\.\w+");

  • if (reg.IsMatch(ln))

  • {

  • Console.WriteLine("Correct mail");

  • }

  • else

  • {

  • Console.WriteLine("Incorrect mail");

  • }



Схожі:

Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації про тип. Центральне місце клас
Змінні категорії Reference Type ведуть себе подібно до вказівникових типів. Відповідні об’єкти розміщуються на купі
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації Назвіть звукову інформацію Дзюркотіння струмочка Плескіт хвиль Смак кавуна Крик чайки Запах фарби Інформацію про те, що на дворі день ми отримуємо за допомогою…
...
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації про витрати бюджетних коштів на відомчі видання Отримання інформації про витрати бюджетних коштів на відомчі видання Міністерство надзвичайних ситуацій Отримання документів щодо реєстрації баз персональних даних
У судовому рішенні звужене тлумачення розпорядника інформації та не застосований трискладовий тест
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconХордові Хто такі хордові?
Хордові- тип вторичноротих тварин, для яких характерна наявність мезодермального осьового скелета у вигляді хорди, яка у вищих форм...
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформація щодо вакцин, яку потребують батьки Джерела, з яких батьки дізнаються про назву та тип щеплення Джерела інформації про щеплення, яким найбільше довіряють батьки
Соціологічне дослідження, щодо виявлення рівня обізнаності мешканців міста Кіровоград про процедуру проходження вакцинації
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації про пункти контролю, за якими виставляються оцінки (один пункт відповідає одному стовпчику з оцінками). Якщо певний контрольний захід (письмове завдання чи тест) має декілька пунктів
Дана таблиця вміщує інформацію про категорії (categories), які використовуються для групування
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації сукупність даних про певний сегмент дійсності, яка зменшує невизначеність суб’єкта у даній ситуації; міра неоднорідності, організованості, різноманіття, структурованості систем; відображення еволюції систем, яке запам’ятоване у структурі системи
Наука про генерування, передачу, перетворення, зберігання і обробку інформації в природних та суспільних системах
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconТип уроку: Тип уроку: систематизація та узагальнення вивченого
Мета: повторити,узагальнити й систематизувати вивчене про дієприкметник,навчитися виконувати морфологічний розбір дієприкметника;розвивати...
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації про стан певного питання Наявність системи збору інформації про стан певного питання Морфологічний, структурний, функціональний та генетичний аналіз релевантної інформації
В. Лазарєв) цілеспрямована цілісність взаємодіючих елементів, яка має нові якості, відсутні у цих елементів, та пов'язана із зовнішнім...
Інформації про типи Оператор is перевірка того, чи має певний об’єкт той чи інший тип. Reflection отримання детальної інформації про тип. Центральне місце клас System. Type iconІнформації про продукцію та отримує також змогу реалізувати своє право на свідомий вибір, на підставі наданої йому інформації. Мета порівняльного тестування Мета тестування
Через доступ до такої інформації споживач реалізує своє право на отримання своєчасної, достовірної та повної інформації про продукцію...

Додайте кнопку на своєму сайті:
dok.znaimo.com.ua


База даних захищена авторським правом ©dok.znaimo.com.ua 2013
звернутися до адміністрації
dok.znaimo.com.ua
Головна сторінка