- •Мови програмування. Представлення даних.
- •1. Вступ. Про обчислювальну техніку.
- •2. Історія мов програмування.
- •3. Поняття про платформу .Net
- •4. Створення мови програмування с#.
- •5. Представлення даних. Необхідність типізації. Двійкова арифметика.
- •6. Основні поняття програмування.
- •Поняття про інтегроване середовище розробки VisualStudio (на прикладі Visual Studio 2005). Структура c#-програми.
- •1. Основні можливості інтегрованого середовища розробки VisualStudio .Net.
- •2. Структура програми мовою с#.
- •Int I; // Визначили цілу змінну
- •Основні елементи мови с#.
- •1. Основні вбудовані типи мови с#
- •2. Визначення та ініціалізація змінних, область їх видимості.
- •3. Приведення типів.
- •Інакше обидва операнди перетворюються до типу int;
- •4. Літерали (константи) мови с#.
- •5. Операції мови с#.
- •5.1. Арифметичні операції.
- •5.2. Операції інкременту та декременту.
- •5.3. Операції відношення (порівняння).
- •5.4. Логічні операції.
- •5.5. Порозрядні (бітові) операції.
- •5.6. Умовна (тернарна) операція.
- •5.7. Операції присвоєння.
- •5.8. Пріоритет операцій.
- •Основні інструкції керування мови с# – розгалуження та цикли.
- •1. Розгалуження у мові с#
- •2. Цикли у мові с#
- •2.1. Цикл for.
- •2.2. Цикл while.
- •2.3. Цикл do-while.
- •3. Керування виходом із циклів с#
- •Масиви в мові с#.
- •1. Визначення та ініціалізація масиву.
- •2. Цикл foreach
- •3. Багатовимірні масиви.
- •4. Використання деяких методів класу System.Array.
- •5. Масиви масивів. Непрямокутні масиви.
- •Структуровані типи даних (колекції) в мові c#
- •1. Основні структури даних та їх призначення
- •2. Використання списку ArrayList та узагальненого списку List
- •3. Використання асоційованого списку Hashtable та узагальненого словника Dictionary
- •Класи в мові с#.
- •1. Визначення класу.
- •2. Методи класу.
- •3. Методи з параметрами.
- •4. Конструктор класу.
- •Методи в мові с#.
- •1. Передача об’єктів методам.
- •2. Використання модифікаторів для параметрів методів.
- •3. Методи, що повертають об’єкти.
- •Перевантаження методів в мові с#.
- •1. Перевантаження методів.
- •2. Перевантаження конструкторів.
- •3. Використання ключового слова this.
- •4. Деструктор класу.
- •5. Метод Main ().
- •Статичні члени класу.
- •1. Статичні дані-члени класу.
- •2. Статичні методи-члени класу.
- •3. Статичний конструктор класу.
- •4. Статичні класи, локалізація та глобалізація
- •Властивості та індексатори.
- •1. Властивості.
- •2. Індексатори.
- •Спадкування в мові с#.
- •1. Поняття про спадкування та ієрархію класів.
- •2. Спадкування та правила доступу до членів класів.
- •3. Конструктори базового та похідних класів.
- •4. Посилання на екземпляри базового та похідних класів.
- •5. Поняття про поліморфізм.
- •6. Віртуальні функції – більш детальний погляд.
- •7. Абстрактні методи та класи.
- •Перевантаження операцій в мові с#.
- •1. Загальні відомості.
- •2. Перевантаження бінарних арифметичних операцій.
- •3. Перевантаження унарних операцій.
- •4. Перевантаження операцій відношення.
- •5. Перевантаження логічних операцій.
- •6. Підсумкові зауваження.
- •Структури та переліки в мові с#.
- •1. Структури.
- •2. Переліки.
- •Делегати, події та обробники подій
- •1. Делегати (delegate).
- •2. Події та їх обробники.
- •Атрибути та їх використання
- •Рекомендована література
3. Приведення типів.
Розберемось, як мова С# суміщає у виразах змінні різних типів, тобто як відбувається перетворення типів, адже відомо, що у всіх виразах та операціях повинні використовуватись змінні однакових типів. З цією метою розглянемо наступний приклад.
using System;
namespace Convert_of_variables_1
{
class Program
{
static void Main()
{
float f = 0;
double x = f; // таке присвоєння припустиме
f = x; // а таке – ні
f = (float)x; // явне приведення типу
Console.WriteLine("f = " + f.ToString());
Console.WriteLine("x = " + x.ToString());
}
}
}
Змінній x типу double можна присвоїти значення змінної менш «потужного» типу, наприклад, типу float, тому що компілятор С# виконує неявне приведення типу (implicit convert), а от розраховувати, що автоматично буде виконане зворотне перетворення – неможливо. Адже при присвоєнні значень більш потужного типу змінній менш потужного типу можливі втрати інформації. Відповідальність за виконання таких операцій в разі їх потреби програміст повинен взяти на себе, необхідно виконати явне приведення типу (explicit convert). Така операція записується інструкцією:
(тип_до_якого_приводимо_вираз)вираз;
При обчисленні виразів, які містять операнди різних типів всі вони приводяться (звісно, якщо типи сумісні між собою) до найбільш широкого типу. Таке перетворення виконується неявним чином при дотриманні низки правил «просування по сходинках типів». При звуженні потужності типу завжди потрібне явне приведення типу. Правила просування є такими:
1. якщо один із операндів має тип decimal , то і другий буде приводитись до такого типу (але якщо другий операнд мав тип float або double, результат буде помилковим);
2. якщо один із операндів має тип double, то і другий буде приводитись до такого типу double;
3. якщо один із операндів має тип float, то і другий буде приводитись до типу float;
4. якщо один із операндів має тип ulong, то і другий буде приводитись до типу ulong (але якщо другий операнд мав цілий знаковий тип, результат буде помилковим);
-
якщо один із операндів має тип long, то і другий буде приводитись до типу long;
-
якщо один із операндів має тип uint, а другий має тип sbyte, short або int , то обидва операнди будуть приведені до типу long;
-
якщо один із операндів має тип uint , то і другий буде приводитись до типу uint;
-
Інакше обидва операнди перетворюються до типу int;
Останнє правило пояснює, чому в наступному коді виникає помилка.
using System;
namespace Convert_of_variables_2
{
class Program
{
static void Main()
{
byte b1 = 16, b2 = 32;
// нижче виникає помилка, оскільки згідно правилу 8,
// результат має тип int
byte b = b1 + b2;
Console.WriteLine("b = " + b.ToString());
}
}
}
Щоб код успішно компілювався та працював, треба виконати явне приведення результату до типу byte , який має змінна b:
byte b = (byte)(b1 + b2); // так правильно!
