- •Лекція 1 Вступ. Огляд парадигм та платформ для Web-розробки. Платформа asp.Net. Інструменти та інтегроване середовище розробки Visual Web Developer 2010.
- •1.1 Вступ. Поняття Інтернет. Базові концепції Всесвітньої павутини www. Еволюція Web
- •1.1.1 Поняття Інтернет
- •1.1.2 Базові концепції Всесвітньої павутини www
- •1.1.3 Еволюція Web
- •1.2 Огляд парадигм та платформ для Web-розробки
- •1.2.2 Найбільш поширені мови та технології розробки
- •1.3 Платформа asp.Net
- •1.3.1 Розвиток asp.Net
- •1.3.2 Ключові переваги asp.Net mvc
- •1.4 Інструменти та інтегроване середовище розробки Visual Web Developer 2010
- •1.4.3 Додаткові компоненти
- •1.4.4 Отримання допоміжної інформації від розробників
- •1 Анатомія html-документа
- •2 Текст
- •3 Гіперпосилання
- •4 Форматовані списки
- •5 Таблиці
- •6 Каскадні таблиці стилів
- •Лекція 3 Синтаксичні конструкції мови c#.
- •3.1Зв’язок між c# I .Net. Особливості платформи .Net
- •3.1.1 Загальномовне виконуюче середовище
- •3.1.2 Класи .Net Framework
- •3.1.3 Простори імен .Net
- •3.2Синтаксичні особливості c#
- •3.2.2 Визначені типи даних
- •3.2.3 Керування потоком виконання
- •3.2.4 Перерахування
- •3.2.5 Простори імен
- •3.2.6 Метод Main (). Консольний ввід-вивід. Коментарі.
- •3.3Об’єкти і типи
- •3.3.1 Класи
- •3.3.2 Структури
- •3.4Наслідування
- •3.4.1 Типи наслідування
- •3.4.2 Модифікатори доступу
- •3.4.3 Інтерфейси
- •3.5Узагальнення
- •3.6Операції
- •1 Колекції
- •2 Делегати
- •Лекція №5 Елементи керування на сторінках asp.Net
- •1. Структура web-додатку на основі asp.Net
- •2. Керування станом в asp.Net
- •3. Серверні елементи керування на сторінках asp.Net
- •3.1 Серверні веб-елементи управління
- •4. Сценарії обробки запитів
- •5. Життєвий цикл сторінки asp.Net
3.6Операції
У мові С # підтримуються операції, перераховані в таблиці.
Категорія |
Операції |
Арифметичні |
+ - * / % |
Логічні |
& | && || ! |
Конкатенація стрічок |
+ |
Інкремент та декремент |
++ -- |
Бітовий зсув |
<< >> |
Порівняння |
== != <> <= => |
Присвоєння |
= += -= *= /= %= &= |= ^= <<= >>= |
Доступ до члена (для об’єктів та структур) |
. |
Індексація (для масивів та індексів) |
[ ] |
Приведення |
( ) |
Умовна (тернарна операція) |
? : |
Делегатна конкатенація та видалення |
+ - |
Створення об’єктів |
new |
Інформація про тип |
sizeof is typeof as |
Контроль виключень |
checked unchecked |
Непряме звернення до адреси |
[ ] |
Кваліфікатор псевдоніму простору імен |
: : |
Операція поглинання null |
?? |
Чотири специфічних операції (sizeof, *, -> і &) доступні тільки в небезпечному коді (коді, що минає контроль безпеки типів С #).
Використання скорочених операцій присвоєння зменшують обсяг коду і є інтуїтивно зрозумілими. Операції декремента та інкремента мають дві форми: префіксну та постфіксну. Префіксна операція збільшить значення х перед обчисленням виразу; іншими словами, значення х збільшиться, і в виразі буде використано це нове значення. В противагу цьому постфіксна операція збільшує значення х після обчислення виразу - тобто у вираі буде брати участь первинне значення х.
Умовна операція (?:), Також відома, як тернарна операція - це скорочена форма конструкції if...else. Ця операція обчислює вираз і повертає перше із значень, якщо вираз істинний, і інше - якщо вираз помилковий. Синтаксис виглядає наступним чином:
умова?true_значення:false_значення
Тут умова - булівський вираз, який має бути обчислено, true_значення - значення, яке повертається, якщо умова істинна, а false_значення - значення, яке повертається, якщо умова помилкова. При акуратному використанні умовна операція може надати дивовижну стислість розроблюваних програм. Особливо зручно це буває для передачі одного з декількох аргументів при виклику функції. Його можна використовувати для швидкого перетворення булівського виразув строкове значення true або false.
Операції checked і unchecked використовуються для позначення блоку коду як checked, в якому CLR здійснить контроль переповнення, і в разі виявлення такого згенерує виключення OvertlowException.
Операція is дозволяє перевірити, чи сумісний об'єкт з певним типом.
Операція as застосовується для виконання явного перетворення змінних типу посилань. Якщо перетворюваний тип сумісний з вказаним, перетворення проходить успішно. Однак якщо типи несумісні, то операція as повертає значення null. Операція as дозволяє виконати безпечне перетворення типу за один крок, без необхідності первісної перевірки його на сумісність з допомогою операції is.
Щоб визначити місце (в байтах), необхідну для розміщення в стеку типу значення, необхідно скористатися операцією sizeof. Якщо операція sizeof застосовується зі складними (а не з примітивними) типами, код знадобиться укласти в блок unsafe, як показано нижче:
unsafe
{
Console.WriteLine (sizeof (int));
}
Операція typeof повертає об'єкт System.Type, що представляє зазначений тип.
Операція поглинання null (??) являє собою скорочений механізм, що забезпечує можливість роботи з null-значеннями у виразах, що включають типи посилань і типи, які допускають null. Операція розміщується між двома операндами - перший повинен мати тип, що допускає null-значення, або тип посилань, а другий повинен бути того ж типу, що і перший, або типу, неявно перетворюваного до типу першого операнду.
Операція поглинання null працює таким чином:
якщо перший операнд не дорівнює null, то весь вираз приймає значення першого операнду;
якщо перший операнд дорівнює null, весь вираз приймає значення другого операнду.
Наприклад:
int? a = null;
int b;
b = a?? 10;//b має значення 10
a = 3;
b = a?? 10;//b має значення З
Якщо другий операнд не може бути неявно перетворений до типу першого операнду, генерується помилка компіляції.
Найвищий пріоритет мають операції первинні та унарні (такі, як приведення, індексація та ін..), за ними йдуть арифметичні, починаючи з множення та ділення, побітового зсуву, відношень, порівняння, бітові та логічні, тернарна операція, і, відповідно, найменший пріоритет мають операції присвоєння.
Перетворення типів
Часто виникає необхідність у перетворенні даних з одного типу в інші. Для цього у C# є перетворення - явне (explicit) і неявне (implicit).
Перетворення типів, звичайно, можуть бути виконані автоматично (неявно) тільки в тому випадку, коли при цьому можна гарантувати, що значення не буде змінено жодним чином. Неявні перетворення допускаються тільки від менших цілих типів до великих, але не навпаки. Можна також перетворювати дані між цілими і дійсними значеннями, однак тут правила злегка відрізняються.
Щодо перетворення типів, що допускають null-значення, прийняті описані нижче додаткові правила:
Типи, що допускають null, неявно перетворюються в інші типи, що допускають null, підкоряючись правилам для цілих чисел.
Типи, що не допускають null, неявно перетворюються в типи, що допускають null, згідно тим же правилам.
Типи, що допускають null, не можуть бути неявно перетворені в типи, що не допускають null; для цього повинно виконуватися явне перетворення. Справа в тому, що змінні цих типів можуть містити значення null, яке неможливо виразити типом, що не допускає null.
Упаковка та розпаковка
Всі типи успадковуються від типу object. Іноді типи значень потрібно виразити як типи посилань. Спосіб, який використовує С # для досягнення такого ефекту, називається упаковкою (boxing). Упаковка та її протилежність - розпаковка (unboxing) – дозволяють перетворювати типи значень в типи посилань, і потім назад в типи значень. Упаковка - термін, що застосовується для опису трансформації типу значення в контрольний тип. В основному, при цьому виконуюче середовище створює тимчасовий "ящик" типу посилання на об'єкт в купі. Розпаковка - це термін, що описує зворотний процес, коли раніше упакована величина приводиться назад до типу значень. Тут використовується термін приведення, оскільки це повинно бути зроблено явно. Можна розпакувати тільки ту змінну, яка була раніше упакована. При розпакуванні слід дотримуватися обережності, щоб приймаюча змінна мала в собі достатньо місця для збереження всіх байтів розпаковуваного значення.
Перевірка рівності об'єктів
Механізми порівняння об'єктів різняться в залежності від того, порівнюються типи посилань (екземпляри класів) або ж типи значень (примітивні типи даних, примірники структур або перерахувань).
Порівняння типів посиланьна еквівалентність
В System.Object визначені три різних методи для перевірки еквівалентності об'єктів: ReferenceEquals() і дві версії Equals(). Додати сюди операцію порівняння (==) – і маємо чотири способи перевірки рівності. Між цими способами існують тонкі відмінності,
Метод ReferenceEquals()
Ref erenceEquals () - статичний метод, перевіряючий, чи вказують два посилання на один і той же екземпляр класу; точніше - чи містять два посилання одну і ту адресу пам'яті. Оскільки це статичний метод, який неможливо перевизначити, його реалізація з System.Object - це те, що доступно завжди. ReferenceEquals() завжди буде повертати true, коли йому передаються два посилання, що вказують на один і той же екземпляр об'єкту, і false - в протилежному випадку.
Віртуальний метод Equals()
Реалізація System.Object віртуальної версії Equals() також порівнює посилання. Однак, оскільки цей метод віртуальний, його можна перевизначати у власних класах, щоб порівнювати об'єкти за значенням.
Статичний метод Equals()
Статична версія Equals() в дійсності робить те ж саме, що і віртуальна версія рівня екземпляра. Різниця в тому, що статична версія приймає два параметри і перевіряє їх на предмет рівності. Статична версія першим ділом перевіряє передані їй посилання на предмет рівності їх null. Якщо вони обидва дорівнюють null, повертається true. Якщо тільки одне з посилань дорівнює null, повертається false. Якщо обидва посилання вказують на що-небудь, викликається версія Equals () рівня екземпляра.
Операція порівняння (==)
Операцію порівняння можна розглядати як проміжний вибір між строгим порівнянням значень і строгим порівнянням посилань.
Перевірка типів значень на рівність
При перевірці на рівність типів значень зберігається той же принцип, що і для посилальних типів: метод ReferenceEquals() використовується для порівняння посилань, Equals() призначений для порівняння значень, а операція == має проміжне призначення. Однак істотна відмінність полягає в тому, що типи значень потребують упаковки для перетворення їх в посилання, щоб з ними можна було використовувати методи.
Також C# дозволяє проводити перегрузку визначених операцій так, ніби перевизначаються методи. Перегрузку можна проводити для таких операцій:
Арифметичні унарні;
Арифметичні бінарні;
Бітові бінарні;
Бітові унарні;
Порівняння;
Присвоєння;
Індексація;
Приведення.
