Типи даних в Visual C # (Sharp)

Тип даних являє собою спосіб для опису одиниці даних за допомогою метаописания Існує кілька типів даних: int, long, short, single, double, string, enum, struct і т д У С # можна навіть визначати власні типи даних Типи даних лежать в основі середовища CLR і забезпечують типову безасность програмування

Середа CLR підтримує дві категорії типів даних: звичайні (прості) типи і посилальні типи Основна різниця між цими двома категоріями типів даих полягає в способі зберігання інформації кожного типу Але поділ на прості і посилальні типи даних було введено порівняно недавно, і для деяких може бути проблемою розібратися з ними

При виконанні додатка середовищем CLR потік виконує інфраструктуру CLI (Common Language Infrastructure, інфраструктура універсальної мови) Рассмоім поняття потоку за допомогою аналогії походу в торговий центр за покупками Як окрема особистість ви можете купувати речі незалежно від інших покупати Але кожен з цих покупців, так само як і ви, є окремою лічнтью і робить свої покупки незалежно від усіх інших покупців Подібним чином в компютері (торговий центр) виповнюється безліч потоків (покупелі), кожен з яких виконує свої операції незалежно від інших потоків У магазині ви можете з необережності зіткнутися з іншим покупцем, і той може впустити свої речі У той час як CLR намагається запобігти таким прлеми, приклавши достатньо зусиль в своєму коді, можна змусити інші потоки упустити свої речі

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

Тепер припустимо, що ви відправилися за покупками разом зі своєю дружиною У вас один кредитний рахунок на двох, але у кожного своя кредитна картка, яка посилається на цей рахунок З готівкою цього робити не можна: розділити 500-рублеву купюру у вас не вийде, і кожен з вас повинен має частина загальної суми оельнимі купюрами

Спосіб оплати готівкою і за допомогою кредитних карток аналогічний звичайним і посилальним типам Готівка – це звичайний тип, а кредитна картка – це контрольний тип При виконанні середовища CLR від одного виклику методу до іншого переноситься код, який є стеком, що містить якесь число змінних звичайного типу Змінні цього типу зберігаються безпосередньо в стеку подібно готівковим в гаманці А змінні посилального типу зберігаються в стеку у вигляді покажчиків на область памяті, містить необхідний дані, як кредитні картки вказують на готівку, які зберігаються в якомусь іншому місці Оасть памяті, що зберігає змінні, на які посилаються покажчики, називається купою (Heap) Всі ці поняття ілюструються на рис 214

Рис 214 Стеки та їх взаємодія з купою під час виконання середовища CLR

При використанні змінних звичайних типів, коли значення однієї змінної призначається інший, вміст першої змінної копіюється в другу Перені Якщо одна з копій модифікується, то ця модифікація не торкається іншу копію На противагу, змінні посилального типу, які ссаются на одне значення, поділяють це значення При модифікації цього значиться всі ці змінні будуть посилатися на нове, модифіковане, значення Повернемося до нашої аналогії з готівкою та кредитними картками: якщо ви і ваша дружина маєте по 500 рублів кожен і ви витратите, скажімо, 300 рублів, то це жодним чином не позначиться на тих 500 рублях, які має ваша дружина, як і личить моделі звичайних типів Але якщо у вас з дружиною є 500 рублів на спільному рахунку ваших кредитних карток і якщо один з вас витратить ті ж 300 рублів, то тоді для кожного з вас будуть доступними тільки решта 200 рублів

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

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

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


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

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*