- •Мови програмування. Представлення даних.
- •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. Статичний конструктор класу.
Якщо клас потребує ініціалізації певних статичних змінних класу раніше, ніж буде створений перший екземпляр класу – йому потрібний статичний конструктор. Статичний конструктор визначається без жодного модифікатору доступу та жодних параметрів. Він викликається системою єдиний раз , проте момент, коли це станеться, не визначений, тому він не повинен містити код, виконання якого потрібне на певний момент часу. Зрозуміло також, що статичний конструктор може використовувати лише статичні члени свого класу. Цілком зрозуміло також, що статичний конструктор у класі може бути лише один. Зауважимо також, що допустимо при цьому мати в класі звичайний конструктор без параметрів – синтаксичного конфлікту не виникне.
У наступному прикладі в класі MyClass визначені 3 конструктори – один із них статичний, два інших мають відповідно один параметр та жодного. Причому останній з них просто викликає конструктор з одним параметром, передаючи йому аргумент, рівний 1. Ще два методи класу (статичний та звичайний) дозволяють слідкувати за значенням закритих членів класу stval та val. Метод change(MyClass m) змінює статичну змінну stval.
using System;
namespace Static_Constructor
{
class Program
{
class MyClass
{
private static int stval;
private int val;
public MyClass(int val_) // Конструктор з 1 параметром
{
val = val_;
Console.WriteLine("Працює конструктор з параметром");
}
public MyClass()
: this(1) // Конструктор без параметру
{
Console.WriteLine(
"Працює конструктор без параметрiв");
}
// Статичний конструктор - викликається лише 1 раз!
static MyClass()
{
stval = 999;
Console.WriteLine("Працює статичний конструктор");
}
public int get_val()
{ return val; }
public static int get_stval()
{ return stval; }
public static void change(MyClass m)
{ stval += m.val; }
}
static void Main()
{
Console.WriteLine("До створення екземплярiв: stval =
{0}", MyClass.get_stval());
MyClass m = new MyClass();
Console.WriteLine("Пiсля створення екземпляру: stval =
{0} val = {1}", MyClass.get_stval(), m.get_val());
MyClass.change(m);
Console.WriteLine("Пiсля change: stval = {0}",
MyClass.get_stval());
MyClass m_ = new MyClass(100);
Console.WriteLine("Пiсля створення екземпляру: stval =
{0} val = {1}", MyClass.get_stval(), m_.get_val());
MyClass.change(m_);
Console.WriteLine("Пiсля change: stval = {0}",
MyClass.get_stval());
}
}
}
Зверніть увагу, що результатом цього прикладу буде 3 повідомлення про роботу конструкторів по створенню екземплярів – створювалось 2 об’єкти m та m_, проте один із конструкторів ініціює інший. Повідомлення про роботу статичного конструктора буде лише одне і з’явиться воно раніше, ніж будуть створені об’єкти m та m_:
Працює статичний конструктор
До створення екземплярiв: stval = 999
Працює конструктор з параметром
Працює конструктор без параметрiв
Пiсля створення екземпляру: stval = 999 val = 1
Пiсля change: stval = 1000
Працює конструктор з параметром
Пiсля створення екземпляру: stval = 1000 val = 100
Пiсля change: stval = 1100
Зауваження. Якщо клас містить лише статичні дані та методи, то необхідно заборонити використовувати екземпляри такого класу. Тоді є сенс зробити конструктор класу без параметрів закритим (private), щоб не спрацьовував конструктор за замовчуванням. Якщо в такому класі необхідна попередня ініціалізація певних даних, визначте статичний конструктор. Іншим вирішенням може бути проголошення всього класу статичним.