![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Змінні. Операції та вирази. Іменовані сталі. Операції та вирази. Перетворення вбудованих арифметичних типів-значень
Типи. Типи даних. Класифікація типів. Вбудовані типи. У мові C# існують такі категорії типів даних: · Значимі типи - прості типи такі як числові типи (int, long, bool та ін.) та структури. · Посилання - Складні типи, такі як рядки, масиви і класи. · Вказівники - існують для маніпуляцій із пам'яттю у блоках некерованого коду. Цілі типи
Числа з плаваючою точкою
Типи літералів. Типи-Значення та типи-Посилання. Упакування і розпакування У мові С# літералом називається деяке фіксоване значення. Іншими словами це таке значення, яким можна ініціалізувати змінну, присвоїти константі тощо. Літерали можуть мати довільний допустимий тип значень. Тип літерала визначається згідно з певними правилами. Цілий літерал не містить десяткової крапки чи знаку порядку. Автоматично відноситься до найменшого знакового цілого типу, починаючи із типу int, до множини значень якого входить літерал. Тобто літерали 25, -10 мають тип int, а літерал 3 333 333 333 має тип long. Посилальні типи Типи-значення (або розмірні типи) походять від базового типу System.ValueType і діляться на три категорії: вбудовані типи, тип перелічення (Enum) і тип користувача. Тип System.ValueType є прямим нащадком System.Object. Будь-який тип, похідний від System.ValueType, є структурою, отож їх ще називають структурними типами. Типи-посилання розділяють на об’єктні типи (object types), інтерфейсні типи (іnterface types), вказівні типи (poіnter types) і тип-посилання користувача. Об’єктний тип аналогічний класу (class) у багатьох об’єктно-орієнтованих мовах програмування. Усі типи-посилання є прямими нащадками класу System.Object. Упаковка і розпаковування Як же ці різні категорії типів забезпечують ефективнішу роботу системи? Це робиться за допомогою упаковки (boxing). У простому випадку при упаковці розмірний тип перетвориться в посилальний. У зворотному випадку посилальний тип розпаковується (unbox) в розмірний. Чудово в даній методиці те, що об'єкт лише тоді є об'єктом, коли це необхідно. Допустимо, ви оголошуєте змінну типу System.Int32. Для неї виділяється пам'ять в стеку. Ви можете передавати цю змінну будь-якому методу, визначеному як тип System, що приймає аргументи. Object, а також звертатися до будь-якого з її членів, до якого у вас є доступ. Тому ви сприймаєте і відчуваєте її як об'єкт. Але в реальності це всього 4 байти в стеку. Тільки коли ви намагаєтеся використовувати цю змінну згідно правилам, певним інтерфейсом базового класу System.Object, система автоматично упаковує змінну, внаслідок чого вона стає посилальним типом і може бути використана так само, як будь-який об'єкт. Упаковка — це механізм, за допомогою якого в С# будь-яка суть може бути представлена у вигляді об'єкту. Це дозволяє уникнути витрат, неминучих в тому випадку, якщо б всяка суть насправді була об'єктом.
Змінні. Операції та вирази. Іменовані сталі. Операції та вирази. Перетворення вбудованих арифметичних типів-значень. Змінні оголошуються за допомогою оператора наступної форми: тип ім'я_змінної; де тип - це тип даних, що зберігаються в змінній; а ім'я_змінної - це її ім'я. Оголосити можна змінну будь-якого дійсного типу, в тому числі і описаних вище типів значень(цілочисельний тип, символьний тип, булевий тип ). Важливо підкреслити, що можливості змінної визначаються її типом. Наприклад, змінну типу bool не можна використовувати для зберігання числових значень з плаваючою точкою. Крім того, тип змінної не можна змінювати протягом терміну її існування. Зокрема, змінну типу int не можна перетворити в змінну типу char. Всі змінні в С# повинні бути оголошені до їх застосування. Це потрібно для того, щоб повідомити компілятор про тип даних, що зберігаються в змінній, перш ніж він спробує правильно скомпілювати будь-який оператор, в якому використовується змінна. Це дозволяє також здійснювати строгий контроль типів в С #. Вираження будуються з операндів - констант, змінних, функцій, - об'єднаних знаками операцій і дужками. При обчисленні виразу визначається його значення і тип. Ці характеристики вираження однозначно визначаються значеннями і типами операндів, що входять у вираз, і правилами обчислення виразу. Правила задають:
Якщо операнди різного типу і/або операція для цього типу не визначена, перед обчисленнями автоматично виконується перетворення типу згідно правил, що забезпечують приведення коротших типів до довших для охорони значущості і точності. Автоматичне (неявне) перетворення можливе не завжди, а тільки якщо при цьому не може трапитися втрата значущості. Якщо неявного перетворення з одного типу в інший не існує, програміст може задати явне перетворення типу за допомогою операції (тип) х. Явне перетворення розглядається в цьому розділі трохи пізніше. Арифметичні операції не визначені для коротших, ніж int, типів. Це означає, що якщо у виразі беруть участь тільки величини типів sbyte, byte, short і ushort, перед виконанням операції вони будуть перетворені в int. Таким чином, результат будь-якої арифметичної операції має тип не менше int. Правила неявного перетворення ілюструє рис. 3.1. Якщо один з операндів має тип, зображений на нижчому рівні, ніж інший, то він буде приводитися до типу іншого операнда за наявності шляху між ними. Якщо шляху немає, виникає помилка компіляції. Якщо шляхів декілька, вибирається найбільш короткий, такий, що не містить пунктирних ліній. Перетворення виконується не послідовно, а безпосередньо з початкового типу в результуючий. Перетворення коротших, ніж int, типів виконується при привласненні. Зверніть увагу на те, що неявного перетворення з float і double в decimal не існує.
9. Введення у виключення С# Виключення - об'єкти класу Exception або його нащадків, у яких передається інформація про помилки. Для обробки виняткових ситуацій використовується конструкція try/catсh, що має наступний синтаксис: try { Можна перехоплювати не одне, а кілька типів винятків, якщо використовувати кілька блоків catch. В цьому випадку більш специфічні винятки повинні передувати більш загальним винятків, оскільки середа виконання переглядає обробники винятків щодо порядку. Перехопивши виняток, можна отримати більш детальну інформацію про помилку. Властивість Message містить короткий опис помилки; властивість TargetSite представляє об'єкт, в якому виникла помилка (використовуючи цей об'єкт, можна отримати ім'я методу, ім'я класу та назва збірки, в якій виникла помилка); властивість InnerException возвращает наступний об'єкт в ланцюжку винятків. У тому випадку, коли в програмному коді обробки помилки немає необхідності в отриманні детальної інформації про помилці, застосовується спрощена конструкція try/catсh: try { Також можна використовувати конструкцію try/catсh/finally, що має наступний синтаксис: try { У якості типу перехватываемого виключення необхідно використовувати клас Exception або його нащадків. Для викидання (порушення) виключення використовується оператор throw, що має наступний синтаксис: throw виключення; У найпростішому випадку для викидання загального виключення використовується наступний синтаксис: throw new Exception("повідомлення про помилку"); Якщо необхідно повторно порушити виняток, перехоплене в блоці catch, слід скористатися оператором throw без параметрів. Основні оперції C#. Інкремент і декремент. Оперція new. Операція заперечення. Явне перетворення типу. Множення, ділення і остача від ділення. Додавання і віднімання. Операції зсуву. Операції відносини й перевірки на рівність. Порозрядні логічні операції. Умовні логічні операції. Інкремент і декремент Це операція з одним аргументом призначена для збільшення (зменшення) аргументу на одиницю. В усіх мовах, де є інкремент або декремент, вони визначені однаково два плюси або мінуса підряд (++ чи -). Якщо в мові існує інкремент або декремент, то існує дві його форми: префіксная (++ х, - х) і Постфіксний (х -, х ++). Інкремент або декремент існують тільки в мовах, що сталися від мови C ++ (Visual C ++, C ++ Builder, Java, JavaScript, PHP, Perl). Префіксная форма відрізняється від постфіксной, тим що в префиксной формі аргумент змінюється і нове значення бере участь у вираженні, а в постфіксной формі спочатку повністю обчислюється вираз, а вже потім аргумент змінюється. У мові C # ключове слово new може використовуватися в якості оператора, модифікатора чи обмеження. Використовується для створення об'єктів і виклику конструкторів. Оператор логічного заперечення (!) - Це унарний оператор, який виконує над своїм операндом операцію НЕ. Він заданий для типу bool і повертає true тоді і тільки тоді, коли його операнд має значення false. Явне перетворення - це спосіб виконання перетворення, який залежить від конкретної мови. У деяких компіляторах для виконання перетворення, звужено діапазон значень, потрібно використовувати явне перетворення. Таких як C # і C ++, явне перетворення виконується за допомогою приведення типів. Приведення типу здійснюється в тому випадку, якщо для перетворення використовується префікс із зазначенням типу даних, що задає тип перетворення, яке потрібно виконати. Розрізняють 5 операцій, що виконують арифметичні дії над числами. Операції оператори мови c # Операції зсуву (<< і >>) застосовуються до цілочисельних операндів. Вони зрушують двійкове представлення першого операнда вліво або вправо на кількість двійкових розрядів, задану другим операндом. При зрушенні розряди, що звільнилися вліво (<<) , обнуляються. При зсуву біти, що звільнилися управо (>>), заповнюються нулями, якщо операнд додатний або беззнакового типу. Для від’ємних чисел вони заповнюються одиницею (1). Операції зсуву ніколи не приводять до переповнювання і втрати значущості. Стандартні операції зсуву визначені для типів int, uint, long і ulong. Операція, що позначається знаком =, називається операцією привласнення. Дана операція є бінарною, має два операнда. Наприклад, X = Y. Операнд зліва від знака може бути тільки змінної, об'єктом. Операнд праворуч може бути вираженням, тобто записом у якій використовуються знаки інших операцій. Як правило, операція = є головною операцією, що утворює оператор присвоювання. Всі операції відносини використовуються для порівняння значень змінних або виразів. Ці операції виробляють значення булевского типу: ІСТИНА (true) або БРЕХНЯ (false). Чисельних еквівалентів для цих значень в мові C # не існує. Перелік операцій наведено в таблиці: У C # є операції, придатні для обробки окремих розрядів пам'яті (наприклад, у відеопам'яті графічного дисплея). Такі операції називаються порозрядну (операції з бітами). Вони дозволяють змінювати, зчитувати і зрушувати розряди в змінних. При цьому змінна розглядається не як число, а як комбінація двійкових розрядів, тобто як логічний код. Операція виконується окремо над кожним розрядом. Перелік порозрядних операцій приведений у наступній таблиці.
![]() |