- •Розділ 1. Основи платформи .Net
- •1.1. Основи платформи .Net
- •1.2. Загальні відомості об'єктно-орієнтованого програмування
- •1.3. Середовище Visual Studio .Net
- •1.4 Консольні додатки
- •Розділ 2. Основні поняття мови
- •2.1. Склад мови
- •2.1.1 Алфавіт і лексеми
- •2.1.2. Ідентифікатори і ключові слова
- •2.1.3. Знаки операцій і роздільники
- •2.1.4. Літерали
- •Константи в с#
- •Суфікси цілих і дійсних констант
- •Управляючі послідовності у с#
- •2.1.5. Коментарі
- •2.2. Типи даних
- •2.2.1. Класифікація типів
- •2.2.2. Типи літералів
- •2.2.3. Типи-значення і посилальні типи
- •2.2.4. Упаковка і розпаковування
- •2.3. Рекомендації по програмуванню
- •Розділ 3. Змінні, іменовані константи, операції і вирази
- •3.1. Змінні і іменовані константи
- •3.2. Операції і вирази
- •3.2.1. Перетворення вбудованих арифметичних типів-значень
- •3.2.2. Введення у виключення
- •3.2.3. Основні операції с#
- •Операнд_1 ? операнд_2 : операнд_3.
- •3.3. Лінійні програми (програмування лінійних обчислювальних процесів)
- •3.3.1. Просте введення-виведення даних
- •3.3.2. Математичні функції - клас Math
- •Розділ 4. Оператори
- •4.1. Вирази, блоки
- •4.2. Оператори розгалуження
- •4.2.1. Умовний оператор if
- •4.2.1. Умовний оператор switch
- •4.3. Оператори циклу
- •4.3.1. Цикл з передумовою while
- •4.3.2. Цикл з постумовою do
- •4.3.3. Цикл з параметром for
- •For ( ініціалізація; вираз; модифікації ) оператор;
- •4.3.4. Цикл перебору foreach
- •4.3.5. Рекомендації по вибору оператора циклу
- •4.4. Обробка виняткових ситуацій
- •4.4.1. Оператор try
- •Try блок [ блоки catch ] [ блок finally ]
- •4.4.2. Оператор throw
- •Throw [ вираз ];
- •4.4.3. Клас Exception
- •4.4.4. Оператори checked и unchecked
- •4.5. Рекомендації по програмуванню
- •Розділ 5. Класи: основні поняття
- •5.1. Привласнення і порівняння об'єктів
- •5.2. Дані: поля і константи
- •5.3. Методи
- •5.3.1. Параметри методів
- •5.3.2. Параметри-значення
- •5.3.3. Параметри-посилання
- •5.3.4. Вихідні параметри
- •5.4. Ключове слово this
- •5.5. Конструктори
- •5.6. Властивості
- •[ Атрибути ] [ специфікатори ] тип ім’я_властивості
- •[ Get код_доступа ] [ set код_доступа ]
- •5.7. Рекомендації по програмуванню
- •Розділ 6. Масиви і рядки
- •6.1. Одновимірні масиви
- •6.2. Прямокутні масиви
- •6.3. Ступінчасті масиви
- •6.4. Клас System.Array
- •6.5. Клас Random
- •6.6. Оператор foreach
- •6.7. Масиви об’єктів
- •6.8. Символи і рядки
- •6.8.1. Символи
- •6.8.2. Масиви символів
- •6.8.3. Рядки типу string
- •6.8.4. Форматування рядків
- •6.8.5. Рядки типу StringBuilder
- •6.9. Рекомендації з програмування
- •Розділ 7. Класи: подробиці
- •7.1. Перевантаження методів
- •7.2. Рекурсивні методи
- •7.3. Методи із змінною кількістю аргументів
- •7.4. Метод Main
- •7.5. Індексатори
- •7.6. Операції класу
- •7.6.1. Унарні операції
- •7.6.2. Бінарні операції
- •7.6.3. Операції перетворення типу
- •7.7. Деструктор
- •7.8. Вкладені типи
- •7.9. Рекомендації по програмуванню
- •Розділ 8. Ієрархії класів
- •8.1. Спадкоємство
- •8.2. Віртуальні методи
- •8.3. Абстрактні класи
- •8.4. Безплідні класи
- •8.5. Клас object
- •8.6. Рекомендації по програмуванню
- •Розділ 9. Інтерфейси і структурні типи
- •9.1. Синтаксис інтерфейсу
- •9.2. Реалізація інтерфейсу
- •9.3. Робота з об'єктами через інтерфейси. Операції is і as
- •9.4. Інтерфейси і спадкоємство
- •9.5. Стандартні інтерфейси .Net
- •9.5.1. Порівняння об'єктів (інтерфейс iComparable)
- •9.5.2 Сортування по різних критеріях (інтерфейс iComparer)
- •9.5.3 Перевантаження операцій відношення
- •9.5.4. Клонування об'єктів (інтерфейс iСloneable)
- •9.5.5. Перебір об'єктів (інтерфейс iEnumerable) і ітератори
- •9.6. Структури
- •9.7. Перелічення
- •9.7.1 Операції з переліченнями
- •9.7.2. Базовий клас System.Enum
- •9.8. Рекомендації по програмуванню
- •Розділ 10. Делегати, події і потоки виконання
- •10.1. Делегати
- •10.1.1. Опис делегатів
- •10.1.2. Використання делегатів
- •10.1.3. Патерн “спостерігач”
- •10.1.4. Операції
- •10.1.5. Передача делегатів в методи
- •10.1.6. Обробка виключень при виклику делегатів
- •10.3. Багатопотокові додатки
- •10.3.1. Клас Thread
- •Lock ( вираз ) блок_операторів
- •10.3.2. Асинхронні делегати
- •10.4. Рекомендації по програмуванню
- •Розділ 11. Робота з файлами
- •11.1. Потоки байтів
- •11.2. Асинхронне уведення-виведення
- •11.3. Потоки символів
- •11.4. Двійкові потоки
- •11.5. Консольне уведення-виведення
- •11.6. Робота з каталогами і файлами
- •11.7. Збереження об'єктів (серіалізація)
- •11.8. Рекомендації по програмуванню
- •Розділ 12. Збірки, бібліотеки, атрибути, директиви
- •12.2. Створення бібліотеки
- •12.3. Рефлексія
- •12.4. Атрибути
- •12.5. Простір імен
- •12.6. Директиви препроцесора
- •# Константний_вираз
- •[ #Elif константний_вираз
- •[ #Elif константний_вираз
- •Розділ 13. Структури даних, колекції і класи-прототипи
- •13.1. Абстрактні структури даних
- •13.2. Простір імен System.Collections
- •13.3. Клас ArrayList
- •13.4. Класи-прототипи
- •13.5. Створення класу-прототипу
- •13.6. Узагальнені методи
- •13.7. Часткові типи
- •13.8. Типи, що обнуляються
- •13.9. Рекомендації по програмуванню
- •Розділ 14. Додаткові засоби с#
- •14.1. Небезпечний код
- •Unsafe блок
- •14.1.1. Синтаксис вказівок
- •14.1.2. Перетворення та ініціалізація вказівок
- •14.1.3. Операції з вказівками
- •14.2. Регулярні вирази
- •14.2.1. Метасимволи
- •14.2.2. Класи бібліотеки .Net для роботи з регулярними виразами
- •14.3. Документування у форматі xml
- •Лабораторні роботи
- •Лабораторна робота 5. Одновимірні масиви
- •Лабораторна робота 6. Двовимірні масиви
- •Лабораторна робота 7. Рядки
- •Лабораторна робота 8. Класи і операції
- •Лабораторна робота 9. Спадкоємство
- •Лабораторна робота 10. Структури
- •Лабораторна робота 11. Інтерфейси і параметризовані колекції
- •Список літератури
- •Додатки Додаток 1. Специфікатори формату для рядків с#
Розділ 2. Основні поняття мови
2.1. Склад мови
2.1.1 Алфавіт і лексеми
У С # використовується кодування символів Unicode. Існує багато різних кодувань символів. Наприклад, в Windows часто використовується кодування ANSI, а конкретно - СР1251. Кожен символ представляється в ній одним байтом (8 біт), тому в цьому кодуванні можна одночасно задати лише 256 символів. У першій половині кодової таблиці знаходяться латинські букви, цифри, знаки арифметичних операцій і інші поширені символи. Другу половину займають символи російського алфавіту. Якщо потрібно представляти символи іншого національного алфавиту (наприклад, албанського), необхідно використовувати іншу кодову таблицю. Кодування Unicode дозволяє представити символи всіх існуючих алфавітів одночасно, що корінним чином поліпшує переносимість текстів. Кожному символу відповідає свій унікальний код. Природно, що при цьому для зберігання кожного символу потрібно більше пам'яті. Перші 128 Unicode-символів відповідають першій частині кодової таблиці ANSI. Алфавіт С # включає:
літери (латинські і національних алфавітів) і символ підкреслення (_), який вживається поряд з літерами;
цифри;
спеціальні символи, наприклад +, *, {, &;
пробільні символи (пробіл і символи табуляції);
символи переводу рядка.
З символів складаються більші будівельні блоки: лексеми, директиви препроцесора і коментарі.
Лексема це мінімальна самостійна одиниця мови. Існують такі види лексем:
імена (ідентифікатори);
ключові слова;
знаки операцій;
роздільники;
літерали (константи).
Лексеми мови програмування аналогічні словам природної мови. Наприклад, лексемами є число 128 (але не його частина 12), ім'я Vasia, ключове слово goto і знак операції додавання +.
Директиви препроцесора прийшли в С # з мови С ++. Препроцесор - попередня стадія компіляції, на якій формується вид вихідного тексту програми. Наприклад, за допомогою директив (інструкцій, команд) препроцесора можна включити або виключити з процесу компіляції фрагменти коду. Директиви препроцесора не відіграють в С # такої важливої ролі, як в С + +. Ми розглянемо їх детально в розділі "Директиви препроцесора". Коментарі призначені для запису пояснень до програми і формування документації. Правила запису коментарів описані далі в цьому розділі. З лексем складаються вирази і оператори. Вираз задає правило обчислення деякого значення. Наприклад, вираз а + b задає правило обчислення суми двох величин. Оператор задає закінчений опис деякої дії, даних або елемента програми. Наприклад: int а; - оператор опису цілочисельної змінної а.
2.1.2. Ідентифікатори і ключові слова
Імена в програмах служать тій же меті, що і імена в світі людей, - щоб звертатися до програмних об'єктів і розрізняти їх, тобто ідентифікувати. Тому імена також називають ідентифікаторами. У ідентифікаторі можуть використовуватися букви, цифри і символ підкреслення. Прописні і рядкові букви розрізняються, наприклад, sysop, Sysop і Sys0p - три різних імені. Першим символом ідентифікатора може бути буква або знак підкреслення, але не цифра. Довжина ідентифікатора не обмежена. Пропуски усередині імен не допускаються. У ідентифікаторах С# дозволяється використовувати окрім латинських букв букви національних алфавітів. Наприклад, Собачка або gg є правильними ідентифікаторами. Більш того, в ідентифікаторах можна застосовувати навіть так звані escape-послідовності Unicode, тобто представляти символ за допомогою його коду в шістнадцятирічному вигляді з префіксом \u, наприклад \u00F2.
Імена даються елементам програми, до яких потрібно звертатися: змінним, типам, константам, методам, міткам і так далі. Ідентифікатор створюється на етапі оголошення змінної (методу, типу і тому подібне), після цього його можна використовувати в подальших операторах програми. При виборі ідентифікатора необхідно мати на увазі наступне:
ідентифікатор не повинен збігатися з ключовими словами.
не рекомендується починати ідентифікатори з двох символів підкреслення, оскільки такі імена зарезервовані для службового використання.
Для поліпшення читабельності програми слід давати об'єктам осмислені імена, складені відповідно до певних правил. Зрозумілі і узгоджені між собою імена - основа хорошого стилю програмування. Існує декілька видів так званих нотацій - угод про правила створення імен.
У нотації Паскаля кожне слово, що становить ідентифікатор, починається з прописної букви, наприклад, MaxLength, MyFuzzyShoosh. Угорська нотація (її запропонував угорець за національністю, співробітник компанії Microsoft) відрізняється від попередньої наявності префікса, відповідного типу величини, наприклад, iMaxLength, lpFfuzzy. Згідно нотації Camel, з прописної букви починається кожне слово, що становить ідентифікатор, окрім першого, наприклад, maxLength, myFuzzyShoosh. Ще одна традиція - розділяти слова, складові ім'я, знаками підкреслення: max_length, my_fuzzy_shoosh, при цьому всі складові частини починаються з рядкової букви.
У С# для іменування різних видів програмних об'єктів найчастіше використовуються дві нотації: Паскаля і Camel.
Ключові слова - це зарезервовані ідентифікатори, які мають спеціальне значення для компілятора. Їх можна використовувати тільки в тому сенсі, в якому вони визначені. Список ключових слів С# приведений в таблиці. 2.1.