|
Скачати 2.03 Mb.
|
using System; namespace AssignStruct { struct ComplexSruct { public double Re, Im; // конструктор структури public ComplexSruct (double Re_, double Im_) { Re = Re_; Im = Im_; } //заміщаємо метод ToString() із System.Object public override string ToString() { if (Im > 0) return String.Format("{0} + {1}i ", Re, Im); else if (Im < 0) return String.Format("{0} - {1}i ", Re, Math.Abs(Im)); else return String.Format("{0}", Re); } } class ComplexClass { public double Re, Im; // конструктор класу public ComplexClass(double Re_, double Im_) { Re = Re_; Im = Im_; } //заміщаємо метод ToString() із System.Object public override string ToString () { if (Im > 0) return String.Format("{0} + {1}i ", Re, Im); else if (Im < 0) return String.Format("{0} - {1}i ", Re, Math.Abs(Im)); else return String.Format("{0}", Re); } } class Program { static void Main() { ComplexSruct st1 = new ComplexSruct(1, 1); ComplexSruct st2 = new ComplexSruct(2, 2); ComplexClass cl1 = new ComplexClass(1, 1); ComplexClass cl2 = new ComplexClass(2, 2); st1 = st2; // Тут копіюються значення структур cl1 = cl2; // Тут копіюються посилання на клас Console.WriteLine("-------------------------"); Console.WriteLine("Структура st1: " + st1.ToString()); Console.WriteLine("Класс cl1: " + cl1.ToString()); st2.Re = 10; st2.Im = 20; // st2 не залежить від st1 // cl2 та cl1 - один і той самий клас cl2.Re = 10; cl2.Im = 20; Console.WriteLine("-------------------------"); Console.WriteLine("Структура st1: " + st1.ToString()); Console.WriteLine("Структура st2: " + st2.ToString()); Console.WriteLine("Класс cl1: " + cl1.ToString()); Console.WriteLine("Класс cl2: " + cl2.ToString()); } } } Після виконання цього прикладу на екрані побачимо: Структура st1: 2 + 2i Класс cl1: 2 + 2i ------------------------- Структура st1: 2 + 2i Структура st2: 10 + 20i Класс cl1: 10 + 20i Класс cl2: 10 + 20i
Перелік в мові С#, як і у багатьох інших мовах, це визначений користувачем злічений тип-значення. Іншими словами – це визначений список імен із зумовленими цілими значеннями. Синтаксис визначення переліку – наступний: enum <�ідентифікатор_переліку> {<�список_переліку>}; Тут <�список_переліку> являє собою список констант, відокремлених комами. За замовчуванням значенням першої константи є 0, а кожна наступна константа має значення на одиницю більшу від попередньої. Втім будь-якій із констант можна присвоїти довільне ціле значення. Розглянемо приклади. using System; namespace Use_enum_0 { class Program { // Цей перелік задає дні тижня public enum Days { Sun, Mn, Tu, We, Th, Fr, St }; static void Main() { for (Days d = Days.Sun; d <= Days.St; d++) Console.WriteLine("День - {0}, значення - {1}", d, (int)d); } } } Тут визначений перелік Days для іменування днів тижня. В циклі змінна d типу Days пробігає значення всіх днів тижня. На екран виводиться назва дня та його значення. Як видно з прикладу доступ до членів переліку відбувається з допомогою крапкової нотації із ідентифікатору переліку та дня тижня: Days.Sun або Days.St. На екрані будуть наступні повідомлення: День - Sun, значення - 0 День - Mn, значення – 1 День - Tu, значення – 2 День - We, значення – 3 День - Th, значення – 4 День - Fr, значення – 5 День - St, значення - 6 Як вже зазначалось, члени переліку можуть мати довільні значення, вказані при визначенні списку переліку. У наступному прикладі визначається подібний перелік. using System; namespace Use_enum_1 { class Program { public enum Flags { ok = 0, error = 128, avost = 1024}; static void Main() { Flags flag; // Тут має бути ініціалізація змінної flag switch (flag) { case Flags.ok : Console.WriteLine("Успiшне завершення"); break; case Flags.error : Console.WriteLine("Помилка виконання"); break; case Flags.avost : Console.WriteLine("Аварiйне завершення"); break; default : Console.WriteLine("неприпустиме значення"); break; } } } } Перелік Flags містить прапорці завершення деякого процесу. Можливим варіантам ok, error та avost приписані відповідно константи 0, 128 та 1024. У перемикачі switch аналізується значення змінної flag та виводиться відповідне повідомлення. Змінна flag може бути проініціалізована різними способами, наприклад, безпосередньо: flag = (Flags) 1024;. При цьому ініціалізація константою, якої немає у переліку, призведе до активації гілку default перемикача switch. Оскільки переліки походять від типу System.Enum, вони мають низку корисних методів. Зокрема статичний метод GetName() повертає назву заданої у переліку константи. Наприклад, інструкція Console.WriteLine(Enum.GetName(typeof(Flags), 128)); у попередньому прикладі призведе до появи на екрані наступного повідомлення: error. Метод Format() дозволяє визначити, якому саме елементу переліку відповідає значення змінної. При цьому це значення можна одержати у десятковому, шістнадцядковому або текстовому форматі в залежності від того, яким символом заданий вид форматування: "d", "x" чи "g". Так, задавши низку інструкцій: flag = (Flags) 1024; Console.WriteLine(Enum.Format(typeof(Flags), flag, "d")); Console.WriteLine(Enum.Format(typeof(Flags), flag, "x")); Console.WriteLine(Enum.Format(typeof(Flags), flag, "g")); на екрані побачимо: 1024 00000400 avost. Корисним також є метод Enum.GetNames(). Він повертає масив назв констант у вказаному переліку. Цей масив далі може бути використаний, наприклад, у циклі foreach. Таким чином, задавши код: Console.WriteLine("Значення прапорцiв наступнi:"); foreach (string s in Enum.GetNames(typeof(Flags))) Console.WriteLine(s); на екрані одержимо всі назви констант переліку Flags: ok error avost System.Enum також має методи, що повертають кількість констант у переліку, сам масив констант, результат перевірки, чи є дана константа елементом переліку та інші корисні методи. |
Програма курсу програмування на мов і С++ Курс націлений на отримання знань і практичних навиків програмування на мовах C і C + + в рамках процедурно-орієнтованого програмування.... |
Основні методології (стилі, парадигми) програмування. Поняття програми.... Дів розробки програм Граді Буча “О’єктно-орієнтоване програмування (ООП) – це методологія програмування, яка заснована на представленні... |
Курс програмування на С # Зусилля, які ви витратите на вивчення С #, будуть винагороджені, так як Сі Шарп був розроблений в якості основної мови програмування,... |
27. Процедурні мови програмування Процедурні мови програмування. Характеристика процедурних мов програмування. Алфавіт. Основні поняття мови: числа, рядки, ідентифікатори,... |
27. Методика навчання обєктно-орієнтованого програмування. Об'єктно́-орієнтоване́... Не зважаючи на те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих. На сьогодні багато... |
29. Опис та використання підпрограм Реалізація базових алгоритмічних структур процедурною мовою програмування. Опис процедур та функцій процедурною мовою програмування.... |
2. Дробово-лінійне програмування Постановка задачі дробово-лінійного... Дослідження операцій”, “Економетрія”, “Моделювання економіки”, “Економічна кібернетика” а також дисциплін циклу загальноекономічної... |
Методичні рекомендації щодо вивчення інформатики у 2012-2013 навчальному році Особливо гостро стоїть питання поглибленого вивчення інформатики та сучасних мов програмування |
ПОРЯДОК проведення відкритої Всеукраїнської студентської олімпіади з програмування Першості світу) з програмування АСМ-ICPC (Association for Computing Machinery International Collegiate Programming Contest), яка... |
1. Українська мова належить до: а східнослов’янської підгрупи мов;... Яке з поданих слів має значення „спрямований вперед; який рухається у висхідному напрямі” |