C# : категорії типів, CST, перетворення. Основні інструкції.


























15666-lektsiya2_types.ppt
- Количество слайдов: 26
C# : категорії типів, CST, перетворення. Основні інструкції.
Common Type System і С# Вбудовані типи С# Перетворення типів. Неявні та явні перетворення Простори назв Оператори С# Інструкції С#
Common Type System і С# Основа ефективного коду Всі типи – об’єктні, задані ієрархією класів System.Object – базовий клас Дві категорії типів стосовно виділення пам’яті та функціонування : типи-значення: примітиви, структури, переліки – об’єкти безпосередньо містять значення int i = 32; // змінна типу System.Int32 у стеку типи-посилання: класи, інтерфейси, делегати, масиви – опосередкований доступ до об’єктів у купі (heap ) або null Механізм пакування-розпаковування (boxing-unboxing) Student stud = new Student(); // посилання на розміщений в купі об’єкт, проініціалізований рядком символів string s = "Hello, World”;
Класифікація типів A globally unique identifier (GUID ) is a statistically unique 128-bit number
Class Object
System.Object Public Methods of the System.Object Protected Methods of the System.Object
Вбудовані типи С#
class MyApplication { static void Main() { int width = 2; int height = 4; int area = width * height; int x; int y = x * 2; ... } } Визначення та ініціалізація локальних змінних Помилка компіляції при використанні локальної змінної без попередньої ініціалізації
Всі вбудовані типи мають конструктор за замовчуванням. Можна утворювати змінні вбудованих типів використовуючи new – конструктор автоматично проініціалізує змінну відповідними значеннями: • bool - false. • Числові типи - 0 (або 0.0). • char - один порожній символ. • BigInteger - 0. ( System.Numerics.dll) • DateTime - 1/1/0001 12:00:00 AM. • Object references (включаючи strings) - null. Визначення та ініціалізація змінних вбудованих типів int width = new int(); //width=0 double radius = new double(); //radius=0.0
char c1 = '1'; char ca = 'a'; Console.WriteLine(c1.Equals('1')); //True Console.WriteLine(c1.GetType()); //System.Char Console.WriteLine(char.IsDigit(c1)); //True Console.WriteLine(char.IsLetter('6')); //False Console.WriteLine(char.IsPunctuation(','));//True Console.WriteLine('a'.Equals('A')); //False Функціонування вбудованих типів
Неявне визначення локальних змінних Можна оголошувати змінні типу var з одночасною ініціалізацією. Тип цієї змінної буде виведено з типу ініціалізатора. Не можна використовувати var для визначення полів класу, параметрів методів чи об’єктів з ініціалізацією null:
Введення з консолі здійснює статичний метод ReadLine з класу Console простору імен System повертає введений рядок символів (string) Часто такий рядок вимагає конвертування до потрібного типу методи конвертування забезпечує клас Convert string s = System.Console.ReadLine(); int i = System.Convert.ToInt32 (s); double d = System.Convert.ToDouble(s); Введення з консолі
Виведення здійснюють статичні методи Write та WriteLine з класу Console простору імен System WriteLine поміщає рядок в потік перевизначені для всіх типів бібліотеки int i = 3; double d = 5.2; System.Console.WriteLine(i); System.Console.WriteLine(d); System.Console.WriteLine("first {0} second {1}", i, d); int double multiple format string placeholder value Виведення на консоль
Неявні перетворення (допустиме використання замість очікуваного типу): a) просування вбудованих типів uint a = 10U; ulong b = a; // void f(ulong x){…} f(a); Перетворення типів
b) пакування (boxing) вбудованих типів (приведення типу-значення до типу-посилання) c) підстановка замість об’єкта базового класу (upcasting) // class B{…} class D: B{…} void f(B x){…} B x = new B(); f( x ); D y = new D(); f( y ); int foo = 42; // value type object bar = foo; // foo is boxed to bar Неявні перетворення
Явні перетворення (контроль наслідків некоректних перетворень) : a) приведення (casting) вбудованих типів b) розпакування (unboxing) вбудованих типів long a= 10L; int b = (int) a; int foo = 42; // Value type object bar = foo; // foo is boxed to bar int foo2 = (int)bar; // Unboxed back to int Перетворення типів
Явні перетворення c) приведення (downcasting) базового класу до похідного // class B{…} class D: B{…} B x = new B(); D y = (D)x; // System.InvalidCastException при недоступності D z = x as D; if (z == null) {...} // System.NullReferenceException при z.method() d) пeретворення (parsing) рядка до числового типу string s=“123456”; long a = long.Parse(s);
Простори назв Глобальний неіменований простір назв Визначення простору назв послідовно в одному модулі вкладені з необхідною глибиною namespace ідентифікатор { визначення просторів назв визначення типів } Використання простору назв using перед просторами назв стосується всіх класів у модулі компіляції using всередині простору назв стосується класів лише цього простору using cпецифікований ід простору назв ; using System; namespace A { namespace B { class X{public int mx; …} } class Y{public int my; …} } namespace С { class Z{public int mz; …} } using A; using A.B; using D=A.B.X; … { … X.mx … Y.my A.B.X.mx… D.mx } … Використання аліясів (псевдонімів) using аліяс = cпецифікований ід простору назв ; using аліяс = cпецифікований ід класу ;
Оператори С#
Інструкції С# Визначення (оголошення) expr; інструкція-вираз { } складена інструкція ; пуста інструкція for , foreach покроковий цикл while цикл з передумовою do-while цикл з післяумовою if умовна інструкція switch перемикач continue інструкція продовження break інструкція виходу return інструкція повернення Лінійні алгоритми Галужені алгоритми Циклічні алгоритми
Умовна інструкція if Особливості: Вираз expr повинен бути тільки булівського типу if (a < 5) b += 27; //error if (a = 5) {…} // int fun() //error if (fun()) {…}
Перемикач switch Особливості: expr в операторі switch може бути не тільки цілочисловим виразом, а й рядком (string). Кожен вибір case повинен закінчуватися break чи goto.
в циклах while та do while умовний вираз повинен бути булівського типу Цикли foreach( in ) { } цикл foreach повторює інструкції для кожного елемента в масиві або для кожного об”єкта колекції . Елементи масиву стають доступними тільки для читання (не можливо їх змінювати). type value collection інструкції
Приклади використання foreach string str=“dhfhsdfdfhgsdj”; foreach (char ch in str) Console.WriteLine(ch+”-”);
Масиви Масиви забезпечують ефективне зберігання послідовності елементів масиви в С# - це тип, похідний від класу System.Array утворюються оператором new необхідно вказати тип елементів та їх кількість доступ до елементів через оператор [ ] кількість елементів в масиві визначається властивістю Length IndexOutOfRangeException генерується при невірному індексі int[] a = new int[5]; int [,] myMatrix=new int [6,8]; a[0] = 17; a[1] = 32; int x = a[1]; int l = a.Length;
Елементам масиву автоматично присвоюється значення за замовчуванням 0 для цілих типів false для bool '\x0000' для char null для посилань Можлива ініціалізація елементів при оголошенні масиву bool[] a = new bool[10]; int[] b = new int[5]; int[] c = new int[5] { 48, 2, 55, 17, 7 }; int [] ages={5,6,8,9,2,0}; Масиви

