Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
веб.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
934 Кб
Скачать
☆

3.2.2 Визначені типи даних

Типи значень і типи посилань

В С # є дві категорії типів даних:

        типи значень;

        типи посилань.

Концептуально різниця між ними полягає в тому, що тип значень (value type) зберігає дані безпосередньо, в той час як тип посилань (reference type) зберігає посилання на значення. Ці типи зберігаються в різних місцях пам'яті: типи значень зберігаються в області, відомій як стек, а типи посилань - в області, званої керованою купою. Присвоєння їм значень дає різний ефект. Наприклад, int - тип значення, і це означає, що наступні оператори в результаті створять дві області пам'яті, кожна з яких буде зберігати значення 20:

//і і j мають тип int

i = 20;

j = i;

Припустимо, що визначений клас по імені Vector. Також припустимо, що Vector - контрольний тип, в якому присутня змінна-член типу int на ім'я Value:

Vector x, у;

х = new Vector ();

х.Value = 30; / / Value - поле, визначене в класі Vector

у = х;

Console.WriteLine (у.Value);

у.Value = 50;

Console.WriteLine (x.Value);

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

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

У С # є 15 визначених типів, 13 типів значень і 2 типи посилань (string і object).

 

Визначені типи значень

Вбудовані типи представляють примітиви, такі як цілі числа і числа з плаваючою комою, символьні і булівські типи.

Мова С # підтримує вісім зумовлених цілочисельних типів, перерахованих в табл. 3.1.

Таблиця 3.1 Цілочисельні типи

Ім’я

Тип CTS

Опис

Діапазон (мінімум:максимум)

sbyte

System.SByte

8-бітне ціле зі знаком

-128:127 (-27:27-1)

short

System.Intl6

16-бітне ціле зі знаком

-32768:32767 (-215:215-1)

int

System.Int32

32-бітне ціле зі знаком

-2147483648:2147483647 (-231:231-1)

long

System.Int64

64-бітне ціле зі знаком

-9223372036854775808: 9223372036854775807

(-263:263-1)

byte

System.Byte

8-бітне ціле без знаку

0:255 (0:28-1)

ushort

System.UIntl6

16-бітне ціле без знаку

0:65535 (0:216-1)

uint

System.UInt32

32-бітне ціле без знаку

0:4294967295 (0:232-1)

ulong

System.UInt64

64-бітне ціле без знаку

0:18446744073709551615

(0:264-1)

В цілях забезпечення безпеки типів С # трактує типи byte і char, як зовсім різні, і будь-які програмні перетворення між ними повинні запитуватися явно.

Якщо виникає якась невизначеність щодо того, чи має ціле значення тип int, uint, long або ulong, то за замовчуванням приймається int.

Типи чисел з плаваючою комою

Ім’я

Тип CTS

Опис

Кількість знаків

Діапазон (мінімум:максимум)

float

System.Single

32-бітне з плаваючою точкою одинарної точності

7

від ±1.5 х 10-45

до ±3.4 x 1038

 

double

System.Double

64-бітне з плаваючою точкою подвійної точності

15/16

від ±5.0 х 10-324

до ±1.7 х 10308

Тип даних float призначений для менших значень з плаваючою точкою, для яких потрібна менша точність. Якщо нецілочисельне значення жорстко кодується (наприклад, 12.3), то зазвичай компілятор припускає, що мається на увазі значення типу double. Якщо значення необхідно специфікувати як float, потрібно додати до нього символ F (або f):

float f = 12.3F;

Десятковий тип

Для представлення чисел з плаваючою точкою високої точності передбачений також десятковий тип decimal.

Ім’я

Тип CTS

Опис

Кількість знаків

Діапазон (мінімум:максимум)

decimal

System.Decimal

128-бітне з плаваючою точкою в десятковій нотації з високою точністю

28

від ±1.0 х 10-28

до ±7.9 x 1028

 

Слід мати на увазі, що decimal не реалізований як примітивний тип, тому застосування decimal може вплинути на продуктивність обчислень. Щоб вказати, що значення має тип decimal, а не double, float або ціле, до значення необхідно додавати символ М (або m), як показано в наступному прикладі:

decimal d = 12.30М;

Булівський тип

Тип bool в С # використовується для зберігання булівских значень - true або false.

Ім’я

Тип CTS

Значення

bool

System.Boolean

true або false

Неявне перетворення значень bool в цілі і назад не допускається. Спроба вказати нуль замість false і ненульове значення замість true призводить до помилки.

Cимвольний тип

Для зберігання одиночних символів в С # підтримується тип даних char.

Ім’я

Тип CTS

Значення

char

System.Char

true або false

Представляє окремий 16-бітний (Unicode) символ. Літерали типу char записуються в одиночних лапках. Нарівні з поданням char як символьних літералів, їх можна представляти як 4-розрядні шістнадцяткові значення Unicode (наприклад, '\u0041').

 

Визначені типи посилань

У С # підтримуються два визначені типи посилань- object і string.

Ім’я

Тип CTS

Опис

object

System.Object

Кореневий тип, від якого успадковуються всі типи CTS (включаючи типи значень)

string

System.String

Стрічка символів Unicode

Тип object

У С# тип object - це первинний батьківський тип, від якого успадковуються всі внутрішні і користувацькі типи. Це означає, що тип object можна використовувати для двох описаних нижче цілей.

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

        Тип object реалізує безліч базових методів загального призначення, серед яких Equals (), GetHashCode (), GetType () іToString ()

Об'єкт string розміщується в купі, а не в стеку, і коли привласнюється одна стрічка іншій, то буде отримано два посилання на одну і ту ж стрічку у пам'яті. Проте поведінка string дещо відрізняється від поведінки інших типів посилань. Наприклад, варто внести зміни в один з цих рядків, як тут же буде створений абсолютно новий об'єкт string, a старий залишиться незмінним.

Стрічкові літерали поміщаються в подвійні лапки ("..."). Якщо спробувати помістити стрічку в одиночні лапки, то компілятор сприйме це значення як char і видасть помилку. Стрічки С #, як і char, можуть містити в собі шістнадцяткові і керуючі послідовності Unicode.

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]