- •Міністерство освіти і науки, молоді та спорту україни
- •Розділ 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. Специфікатори формату для рядків с#
Операнд_1 ? операнд_2 : операнд_3.
Перший операнд - вираз, для якого існує неявне перетворення до логічного типу. Якщо результат обчислення першого операнда рівний true, то результатом умовної операції буде значення другого операнда, інакше - третього операнда. Обчислюється завжди або другий операнд, або третій. Приклад застосування умовної операції представлений в лістингу 3.8.
Лістинг 3.8. Умовна операція
using System;
namespace Consoleapplicationl
{
class Classl
{
static void Main( )
{
int a = 11, b = 4;
int max = b > a ? b : a;
Console.WriteLine( max ); // Результат 11
}
}
}
Операції привласнення
Операції привласнення ( =, + =, -=, *= і т. д.) задають нове значення змінної. Ці операції можуть використовуватися в програмі як закінчені оператори.
Формат операції простого привласнення (=):
Змінна = Вираз
Механізм виконання операції привласнення такий: обчислюється вираз і його результат заноситься в пам'ять за адресою, яка визначається ім'ям змінної, операцією, що знаходиться зліва від знаку. Те, що раніше зберігалося в цій області пам'яті, природно, втрачається. Схематично це корисно уявити собі так:
Змінна Вираз
Приклади операторів привласнення:
а = b + с / 2;
b = а;
а = b;
х = 1;
х = х + 0.5;
Для правого операнда операції привласнення повинно існувати неявне перетворення до типу лівого операнда. Наприклад, вираз цілого типу можна привласнити дійсній змінній, тому що цілі числа є підмножиною дійсних, і інформація при такому привласненні не втрачається:
дійсна змінна = цілий_вираз;
Результатом операції привласнення є значення, записане в лівий операнд. Тип результату збігається з типом лівого операнда.
У складних операціях привласнення ( + =, * =, /= і т. п.) при обчисленні виразу, що стоїть в правій частині, використовується значення з лівої частини. Наприклад, при складанні з привласненням до другого операнда додається перший, і результат записується в перший операнд, тобто вираз а += b є компактнішим записом виразу а = а + b.
Результатом операції складного привласнення є значення, яке записане в лівий операнд.
Операції привласнення правоасоціативні, тобто виконуються справа наліво, на відміну від більшості інших операцій (а = b = с означає а = (b = с) ).
3.3. Лінійні програми (програмування лінійних обчислювальних процесів)
Лінійною називається програма, всі оператори якої виконуються послідовно в тому порядку, в якому вони записані. Простим прикладом лінійної програми є програма розрахунку по заданій формулі. Вона складається з трьох етапів: введення початкових даних, обчислення за формулою і виведення результатів.
3.3.1. Просте введення-виведення даних
Будь-яка програма при введенні початкових даних і виведенні результатів взаємодіє із зовнішніми пристроями. Сукупність стандартних пристроїв введення і виведення, тобто клавіатури і екрану, називається консоллю. У мові С# немає операторів введення і виведення. Замість них для обміну із зовнішніми пристроями застосовуються стандартні об'єкти. Для роботи з консоллю в С# застосовується клас Console, визначений в просторі імен System. Методи цього класу Write і Writeline вже використовувалися в наших программах. Розглянемо ці методи детальніше на прикладі лістингу 3.9.
Лістинг 3.9. Методи виведення
using System;
namespace ConsoleApplicationl
{ class Classl
{ static void Main()
{
int i = 3;
double y = 4.12;
decimal d = 600m;
string s = "Вася";
Console.WriteLine( "i = " + i ) ; //1
Console.WriteLine( "y = {0} \nd = {1}", y, d ); // 2
Console.WriteLine( "s = " + s ) ; //3
}
}
}
Результат роботи програми:
i= 3
y = 4,12
d = 600
s = Вася
На лістингу 3.9 в рядках 1 і 3 показано виведення пояснень і значень змінних. Коли метод Writeline викликаний з одним параметром, він може бути числом, символом або рядком. Якщо потрібно вивести в рядку не одну, а дві величини: текстове пояснення і значення змінної, необхідно їх “склеїти” в один рядок за допомогою операції “+”. Перед об'єднанням рядка з числом треба перетворити число з його внутрішньої форми уявлення в послідовність символів, тобто в рядок. Перетворення в рядок визначене у всіх стандартних класах С# - для цього служить метод ToString(). В даному випадку він виконується неявно, але можна викликати його і явним чином:
Console.WriteLine( "i = " + i.ToString( ));
Оператор 2 ілюструє виведення формату. В цьому випадку використовується інший варіант методу Writeline, який містить більше одного параметра. Першим параметром передається рядковий літерал, що містить окрім звичайних символів і послідовностей, що управляють, параметри у фігурних дужках. Параметри нумеруються з нуля, перед виведенням вони замінюються значеннями відповідних змінних в списку виведення: нульовий параметр замінюється значенням першої змінної (у даному прикладі - у), перший параметр - другою змінною (у даному прикладі - d) і так далі
Для кожного параметра можна задати ширину поля виведення і формат виведення. Це буде розглянуто нижче.
З послідовностей, що управляють, найчастіше використовуються символи переведення рядка (\n) і горизонтальної табуляції (\t).
Розглянемо прості способи введення з клавіатури. У класі Console визначені методи введення рядка і окремого символу, але немає методів, які дозволяють безпосередньо зчитувати з клавіатури числа. Введення числових даних виконується в два етапи: символи, що є числом, вводяться з клавіатури в рядкову змінну. Потім виконується перетворення з рядка в змінну відповідного типу. Перетворення можна виконати або за допомогою спеціального класу Convert, визначеного в просторі імен System, або за допомогою методу Parse, наявного в кожному стандартному арифметичному класі. У лістингу 3.10 використовуються обидва способи.
Лістінг 3.10. Методи введення
usingSystem;
namespace ConsoleApplicationl
{
class Classl
{
static void Main()
{
Console.WriteLine("Введите строку");
string s = Console.ReadLine( ); // 1
Console.WriteLine( "s = " + s );
Console.WriteLine("Введите символ" );
char с = (char)Console.Read( ); // 2
Console.ReadLine( ); // 3
Console.WriteLine( "c = " + с );
stringbuf; //рядок- буфер длявведеннячисел
Console.WriteLine( "Введите целое число" );
buf = Console.ReadLine( );
int i = Convert.ToInt32( buf ); // 4
Console.WriteLine( i );
Console.WriteLine( "Введите вещественное число" );
buf = Console.ReadLine( );
double x = Convert.ToDouble( buf ); // 5
Console.WriteLine( x );
Console.WriteLine( "Введите вещественное число" );
buf = Console.ReadLine( );
double y = double.Parse( buf ); // б
Console.WriteLine( y );
Console.WriteLine( "Введите вещественное число" );
buf = Console.ReadLine( );
decimal z = decimal.Parse( buf ); // 7
Console.WriteLine( z );
}
}
}