Обмеження звичайних типів в Visual C # (Sharp)

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

Ефекти, викликані копіюванням даних

Коли одна змінна користувальницького звичайного типу присвоюється іншої змінної цього типу, вміст першої змінної копіюється в другу Щоб побачити цей процес у дії, розглянемо спочатку, як оголошуються користувача типи Цей процес показаний на рис 44

Рис 44 Оголошення користувача типів

При оголошенні користувача типів елементи даних і методи оголошуються між фігурними дужками ({}) Оголошення можна розглядати як напис на ящику, фігурні дужки – як ящик, а все, що в фігурних дужках, – як сержімое ящика Все, що знаходиться в фігурних дужках, є тілом типу Ідентифікатор перед першим фігурною дужкою називається імям типу

У тому вигляді, в якому типи оголошені на рис 44, вони не мають ідентифікат області видимості Область видимості можна розглядати як визначення,

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

Але якби перед ідентифікатором типів було поставлено ключове слово public, тоді користувача тип був би доступний усім компонентам програно, начебто б хто завгодно мав право перевіряти вміст вашого гаманця У разі гаманця, встановлювати загальну область видимості – не дуже хорая ідея, але коли доступ до області видимості можна контролювати, то для тов така область видимості іноді може бути бажаної Це можна порівняти з оплатою кредитною карткою, коли ви віддаєте її касиру для здійснення транзакції У цьому випадку ви надаєте доступ до частини свого гаманця, але під вашим контролем

Тепер розглянемо код на рис 45 У ньому створюється і присвоюється змінної екземпляр типу MyVaiueType, після чого значення першої змінної прісваіваея іншої змінної такого ж типу

Рис 45 Застосування користувальницького звичайного типу

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

Для порівняння, ті ж самі операції можна виконати зі посилальним типом, як показано в наступному коді:

MyReferenceType val = new MyReferenceType() MyReferenceType copiedVal = val

ConsoleWriteLine(&quotval value=&quot + valvalue +

&quot&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp copiedVal value=&quot + copiedValvalue)

valvalue = 10

ConsoleWriteLine(&quotval value=&quot + valvalue +

&quot&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp copiedVal value=&quot + copiedValvalue)

Значить, якщо два фрагмента коду функціонально ідентичні, з єдиною раіцей, що полягає у вигляді типів (звичайний порівняно зі посилальним), то вони видадуть однакові результати Виконавши обидва фрагмента коду, ми отримаємо наступні результати:

var value=0  copiedVar value=0 var value=10 copiedVar value=0 val value=0  copiedVal value=0 val value=10 copiedVal value=10

Як можна бачити з цих результатів, два функціонально однакових фрагмента коду, що відрізняються тільки видом типу змінної, видають абсолютно різні результати:

• коли присвоюється і модифікується значення змінної звичайного типу, то змінюється тільки вміст модифікується змінної

• коли присвоюється і модифікується значення змінної посилального типу, змінюється вміст як первісної, так і присваиваемой змінної

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

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

Джерело: Гросс К С # 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>

*

*