русс | укр

C# - Головна
Контакти
Задайте питання...
Перегляд всіх питань


Простір імен
  ► System (5)
  ► Microsoft (1)


Для учнів (початківців)
  ► Відео уроки (4)
  ► Навчання (177)
  ► Приклади програм (19)
  ► Секрети Сі Шарп (4)

Для професіоналів
  ► Навчання (6)
  ► Приклади програм (1)










ТИПИ ДАНИХ

 

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

Є й інші критерії класифікації типів. Так, типи поділяються на вбудовані типи і типи, визначені програмістом (користувачем). Вбудовані типи спочатку належать мові програмування і складають його базис. В основі системи типів будь-якої мови програмування завжди лежить базисна система типів, вбудованих в мову. На їх основі програміст може будувати власні, їм самим певні типи даних.

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

Ще одна важлива класифікація типів - це їх поділ на значущі і смітники. Для значущих типів значення змінної (об'єкта) є невід'ємною власністю змінної (точніше, є власністю пам'ять, відведена значенням, а саме значення може бути змінена). Для посилальних типів значенням служить посилання на деякий об'єкт в пам'яті, розташований зазвичай у динамічній пам'яті - "купі".

 

нижче наведено перелік усіх вбудованих типів мови C# і їх основні характеристики.

 

Логічний тип

Ім'я типу Системний тип Значення Розмір
Bool System.Boolean true, false 8 біт

Арифметичні цілочисельні типи

Ім'я типу Системний тип Діапазон Розмір
Sbyte System.SByte -128 — 127 Знакова, 8 Біт
Byte System.Byte 0 — 255 Беззнакове, 8 Біт
Short System.Short -32768 -32767 Знакова, 16 Біт
Ushort System.UShort 0 — 65535 Беззнакове, 16 Біт
Int System.Int32 ≈(-2*10^9 — 2*10^9) Знакова, 32 Біт
Uint System.UInt32 ≈(0 — 4*10^9) Беззнакове, 32 Біт
Long System.Int64 ≈(-9*10^18 — 9*10^18) Знакова, 64 Біт
Ulong System.UInt64 ≈(0— 18*10^18) Беззнакове, 64 Біт

Арифметичний тип з плаваючою точкою

Ім'я типу Системний тип Діапазон Точність
Float System.Single +1.5*10^-45 - +3.4*10^38 7 цифр
Double System.Double +5.0*10^-324 - +1.7*10^308 15-16 цифр

Арифметичний тип з фіксованою точкою

Ім'я типу Системний тип Діапазон Точність
Decimal System.Decimal +1.0*10^-28 - +7.9*10^28 28-29 значущих цифр

Символьні типи

Ім'я типу Системний тип Діапазон Точність
Char System.Char U+0000 - U+ffff 16 біт Unicode символ
String System.String   Рядок символів Unicode

Об'єктний тип

Ім'я типу Системний тип Примітка
Object System.Object Прабатько всіх вбудованих і користувацьких типів

 

Розглянемо приклад оголошення змінних і присвоювання їм значень:

 

int x=11;

int v = new Int32();

v = 007;

string s1 = "Agent";

s1 = s1 + v.ToString() +x.ToString();

 

У цьому прикладі змінна x оголошується як звичайна змінна типу int. У той же час для оголошення змінної v того ж типу int використовується стиль, прийнятий для об'єктів. В оголошенні застосовується конструкція new і виклик конструктора класу. В операторі присвоювання, записаному в останньому рядку фрагменту, для обох змінних викликається метод ToString, як це робиться при роботі з об'єктами. Цей метод, успадкований від батьківського класу Object, перевизначено у класі int, повертає рядок з записом цілого.

Розглянемо ще один тип даних – структуру. Синтаксис оголошення структури аналогічний синтаксису оголошення класу:

 

[атрибути][модифікатори]struct имя_структуры[:список_интерфейсов]

{тело_структуры}

 

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

 

Але порівняно з класами, структури мають суттєві обмеження.

1) Найбільш серйозне обмеження пов'язане з обмеженням спадкування, тобто у структури не може бути спадкоємців, не може бути задано батьківський клас або батьківська структура.

2) Друге серйозне обмеження пов'язане з процесом створення об'єктів. Нехай T - структура, і дано оголошення без ініціалізації - T x. Це оголошення коректно, в результаті буде створений об'єкт без явного виклику операції new. Сутності x буде відведена пам'ять, і на цій пам'яті буде розташовано об'єкт. Але поля об'єкта не будуть ініціалізується і, отже, не будуть доступні для використання в обчисленнях. Про ці особливості докладно йшлося при розгляді значущих типів. В цьому відношенні все, що вірно для типу int, вірно і для всіх структур.

 

Переглядів: 1975






© 2012 ci-sharp.ru При використанні матеріалу пряме iндексуюче посилання на сайт ОБОВ'ЯЗКОВЕ.
Права строго захищені нормами міжнародного права, інтелектуальної власності та авторського права.