Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КНЕУ.doc
Скачиваний:
24
Добавлен:
07.03.2016
Размер:
3.9 Mб
Скачать

2.1.5. Коментарі

Коментарі призначені для запису пояснень до програми і формування документації. Компілятор коментарі ігнорує. У середині коментаря можна використовувати будь-які символи. У С# є два види коментарів: однорядкові і багаторядкові.

Однорядковий коментар починається з двох символів прямої косої межі (//) і закінчується символом переходу на новий рядок, багаторядковий полягає між символами-дужками /* і */ і може займати частину рядка, цілий рядок або декілька рядків. Коментарі не вкладаються один в одного: символи // і /* не володіють ніяким спеціальним значенням усередині коментаря.

Крім того, в мові є ще один різновид коментарів, які починаються з трьох підряд символів косої межі, що йдуть (///). Вони призначені для формування документації до програми у форматі XML. Компілятор витягує ці коментарі з програми, перевіряє їх відповідність правилам, записує їх в окремий файл. Правила завдання коментарів цього вигляду розглянемо у розділі 14.

2.2. Типи даних

Дані, з якими працює програма, зберігаються в оперативній пам'яті. Природно, що компілятору необхідно точно знати, скільки місця вони займають, як саме закодовані і які дії з ними можна виконувати. Все це задається при описі даних за допомогою типу.

Тип даних однозначно визначає:

  • внутрішнє представлення даних, а, отже, і множину їх можливих значень;

  • допустимі дії над даними (операції і функції).

Наприклад, цілі та дійсні числа, навіть якщо вони займають однаковий об'єм пам'яті, мають абсолютно різні діапазони можливих значень; цілі числа можна множити один на одного, а, наприклад, символи - не можна.

Кожен вираз в програмі має певний тип. Величин, що не мають ніякого типу, не існує. Компілятор використовує інформацію про тип при перевірці допустимості описаних в програмі дій.

Пам'ять, в якій зберігаються дані під час виконання програми, ділиться на дві області: стек (stack) і динамічна область, або хіп (heap). Динамічну область називають іноді “купою”. Стек використовується для зберігання величин, пам'ять під яких виділяє компілятор, а в динамічній області пам'ять резервується і звільняється під час виконання програми за допомогою спеціальних команд. Основним містом для зберігання даних в С# є хіп.

2.2.1. Класифікація типів

Перш ніж перейти до вивчення конкретних типів мови С#, розглянемо їх класифікацію. Всі типи можна розділити на прості (не мають внутрішньої структури) і структуровані (складаються з елементів інших типів). Типи можна розділити на вбудовані (стандартні) і визначених програмістом (рис. 2.1). Для даних статичного типу пам'ять виділяється у момент оголошення, при цьому її необхідний об'єм відомий. Для даних динамічного типу розмір даних у момент оголошення може бути невідомий, і пам'ять під них виділяється за запитом в процесі виконання програми.

Вбудовані типи не вимагають попереднього визначення. Для кожного типу існує ключове слово, яке використовується при описі змінних, констант і т.д. Якщо ж програміст визначає власний тип даних, він описує його характеристики і сам дає йому ім'я, яке потім застосовується точно так, як і імена стандартних типів. Опис власного типу даних повинен включати всю інформацію, необхідну для його використання, а саме внутрішнє уявлення і допустимі дії.

Рис. 2.1. Різні класифікації типів даних С#

Вбудовані типи С# приведені в таблиці. 2.5. Вони однозначно відповідають стандартним класам бібліотеки .NET, визначеним в просторі імен System. Як видно з таблиці, існують декілька варіантів представлення цілих і дійсних величин. Програміст вибирає тип кожної величини, яка використовується в програмі, з урахуванням необхідного йому діапазону і точності представлення даних.

Цілі типи, а також символьний, дійсний і фінансовий типи можна об'єднати під назвою арифметичних типів.

Внутрішнє представлення величини цілого типу - ціле число в двійковому коді. У знакових типах старший біт числа інтерпретується як знаковий (0 додатне число, 1 – від’ємне). Від’ємні числа найчастіше представляються в так званому додатковому коді. Для перетворення числа в додатковий код всі розряди числа, за винятком знакового інвертуються, потім до числа додається одиниця, і знаковому біту теж привласнюється одиниця. Беззнакові типи дозволяють представляти тільки додатні числа, оскільки старший розряд розглядається як частина коду числа.

Для дійсних і фінансового типів в таблиці приведені абсолютні величини мінімальних і максимальних значень. Дійсні типи, або типи даних, з плаваючою крапкою зберігаються в пам'яті комп'ютера інакше, ніж цілочисельні. Внутрішнє представлення дійсного числа складається з двох частин - мантиси і порядку, кожна частина має знак. Довжина мантиси визначає точність числа, а довжина порядку - його діапазон. У першому наближенні це можна уявити собі так: наприклад, для числа 0,381•104 зберігаються цифри мантиси 381 і порядок 4, для числа 560,3•102 - мантиса 5603 і порядок 5 (мантиса нормалізується), а число 0,012 представлено як 12 і -1. Звичайно, в даному прикладі не враховані система числення і інші особливості. Всі дійсні типи можуть бути представлені як додатні, так і від’ємні числа.

Таблиця 2.5.

Вбудовані типи С#

Ключове слово

Тип .NET

Діапазон значень

Опис

Розмір, бітів

bоо1

Boolean

true, false

sbyte

SByte

От-128 до 127

Із знаком

8

byte

Byte

От 0 до 255

Без знаку

8

short

Intl6

От –З2768 до З2767

Із знаком

16

ushort

UIntl6

От 0 до 655З5

Без знаку

16

int

Int32

От -231 до 231 – 1

Із знаком

32

uint

UInt32

От 0 до 232 – 1

Без знаку

32

long

Int64

От -263 до 263 – 1

Із знаком

64

ulong

UInt64

От 0 до 264 – 1

Без знаку

64

char

Char

От U+0000 до U+ffff

Unicode-символ

16

float

Single

От 1.5•10-45 до 3.4•1038

7 цифр

32

double

Double

От 5.0•10-324 до 1.7•10308

15-16 цифр

64

decimal

Decimal

От 1.0•10-28 до 7.9•1028

28-29 цифр

128

string

String

Довжина обмежена об'ємом доступної пам'яті

Рядок з Unicode- символів

object

Object

Можна зберігати все що завгодно

Загальний предок

Найчастіше в програмах використовується тип double, оскільки його діапазон і точність задовольняють більшість потреб. Цей тип мають дійсні літерали і багато стандартних математичних функцій. При однаковій кількості байтів, що відводяться під величини типу float і int, діапазони їх допустимих значень сильно розрізняються із-за внутрішньої форми уявлення.

Те ж саме відноситься до long і double. Тип decimal призначений для грошових обчислень, в яких критичні помилки округлення. Як видно з таблиці 2.5, тип float дозволяє зберігати одночасно всього 7 значущих десяткових цифр, тип double - 15-16. При обчисленнях помилки округлення накопичуються, і при певному поєднанні значень навіть може привести до результату, в якому не буде жодної вірної значущої цифри! Величини типу decimal дозволяють зберігати 28-29 десяткових розрядів.

Тип decimal не відноситься до дійсних типів, у них різне внутрішнє уявлення. Величини грошового типу навіть не можна використовувати в одному виразі з дійсними без явного перетворення типу. Використання величин фінансового типу в одному виразі з цілими допускається.

Будь-який вбудований тип С# відповідає стандартному класу бібліотеки .NET, визначеному в просторі імен System. Скрізь, де використовується ім'я вбудованого типу, його можна замінити ім'ям класу бібліотеки. Це означає, що у вбудованих типів даних С# є методи і поля. З їх допомогою можна, наприклад, набути мінімальних і максимальних значень для цілих, символьних, фінансових і дійсних чисел:

  • double.MaxValue (или System.Doublе.MaxValue) - максимальне число типу double;

  • uint.MinValue (или System.UInt32.MinValue)- мінімальне число типа uint.