русс | укр

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


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


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

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










Система типів мови С#

 

Знайомство з новим мовою програмування розумно починати з вивчення системи типів цієї мови. В ньому влаштована система типів даних? Які є прості типи, як створюються складні, структурні типи, як визначаються власні типи, динамічні типи, як визначаються класи?

У перших мовах програмування поняття класу відсутнє - розглядалися тільки типи даних. При визначенні типу явно задавалося тільки безліч можливих значень, які можуть приймати змінні цього типу. Наприклад, тип integer задає цілі числа в деякому діапазоні. Неявно з типом завжди зв'язувався і набір дозволених операцій. У типізованих мовах, до яких відноситься більшість мов програмування, поняття змінної природним чином пов'язувалося з типом. Якщо є тип Т і x-змінна типу Т, то це означало, що змінна може приймати значення з безлічі, заданого типу, і до неї застосовні операції, дозволені типом.

Класи об'єкти вперше з'явилися в програмуванні на мові Симула 67. Сталося це через 10 років після появи першого алгоритмічного мови Фортран. Визначення класу поряд з описом даних містила чітке визначення операцій або методів, застосовних до даних. Об'єкти - екземпляри класу є узагальненням поняття змінної. Сьогодні визначення класу в C# і інших об'єктних мовами, аналогічно визначенню типу в CTS, містить:

· дані, які визначають властивості об'єктів на класу;

· методи, що визначають поведінку об'єктів класу;

· події, які можуть відбуватися з об'єктами класу.

Так чи є різниця між цими двома основними поняттями - типом класом? На перших порах можна вважати, що клас - це добре певний тип даних, об'єкт - добре визначена змінна. Поняття фактично є синонімами, яку з них вживати лише справа смаку. Вбудовані типи, такі як integer або string, воліють називати раніше типами, а їх примірники - змінними. Що ж стосується абстракції даних, що описує службовців і названої, наприклад, Employee, то природніше називати її класом, а примірники об'єктами. Такий погляд на типи і класи досить корисний, але він не є повним. Пізніше при обговоренні класів і спадкування постараємося більш чітко визначити принципові відмінності в цих поняттях.

Об'єктно-орієнтоване програмування, домінуюче сьогодні, побудоване на класах об'єкти. Тим не менше, поняття типу і змінної все ще залишаються центральними при описі мов програмування, що характерно і для мови C#. Зауважте, що і в Framework .Net воліють говорити про системі типів, хоча всі типи бібліотеки FCL класами.

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

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

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

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

Для більшості процедурних мов, реально використовуються програмістами - Паскаль, C++, Java, Visual Basic, C#, - система вбудованих типів більш-менш однакова. Завжди у мові присутні арифметичний, логічний (булев), символьний типи. Арифметичний тип завжди розбивається на підтипи. Завжди допускається організація даних у вигляді масивів і записів (структур). Всередині арифметичного типу завжди допускаються перетворення, завжди є функції, що перетворюють рядок у число і назад. Так що, мій читач, Ваше знання, принаймні, одного з процедурних мов дозволяє побудувати загальну картину системи типів для мови C#. Відмінності будуть в нюансах, які і надають аромат і неповторність мови.

Оскільки мова C# є безпосереднім нащадком мови C++, то і системи типів цих двох мов близькі і збігаються аж до назви типів і областей їх визначення. Але відмінності, в тому числі принципового характеру, є і тут.

4.3.1 Система типів Давайте розглянемо, як влаштована система типів у мові C#

Всі типи можна розділити на чотири категорії:

1. Типи-значення (value), або значущі типи.

2. Посилання (reference).

3. Покажчики (pointer).

4. Тип void.

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

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

Особливий статус має і тип void, що вказує на відсутність будь-якого значення.

У мові C# жорстко визначено, які типи відносяться до посилальних, а які - до значущим. До значущим типами відносяться: логічний, арифметичний, структури, перерахування. Масиви, рядка класи відносяться до посилальних типів.

Розглянемо класифікацію, згідно з якою всі типи діляться на вбудовані певні користувачем. Всі вбудовані типи C# однозначно відображаються, а фактично збігаються з системними типами каркаса .Net Framework, розміщеними у просторі імен System. Тому всюди, де можна використовувати ім'я типу, наприклад, int, з тим же успіхом можна використовувати і ім'я System.Int32.

 

 

Таблиця 4.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 Прабатько всіх вбудованих і користувацьких типів

 

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






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