Нульові типи в Visual C # (Sharp)

У NET null означає відсутність значення, і ми всі знаємо, що це означає, чи не так Наприклад, використання null демонструється в наступному коді:

Object value = null if (value == null) {

ConsoleWriteLine(&quotYup a null&quot)

}

Приклад демонструє очевидне і не робить нічого корисного Якби була зроблена спроба викликати метод objectTostringo, то було б сгенерірово виняток Таким чином, даний код створює змінну value, яка ні на що не посилається і не має значення Такий код працює, тому що в прикладі використовується контрольний тип NET Тепер давайте подивимося, що станеться, коли нульове значення присвоюється нульового типу:

int value = 0  if (value == 0) {

ConsoleWriteLine(&quotYup a null&quot)

}

На цей раз, тип змінної value НЕ object, a int, а змінної value присвоєно значення 0, щоб вказувати значення null Я вже чую, як багато хто з читачів заперечують, що о = Null Але в мовах програмування С + + і С null і 0 мають одне і те ж контекстне значення

У NET 20 і конкретно в С # є новий конструктив програмування, НАЗАнульовим типом(Nullable type) Нульовий тип вирішує проблему, коли

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

У С # нульовий тип застосовується для визначення змінної, що має стан null У прикладі з звичайним типом, цілочисельний змінної було присвоєно значення 0, але було б доречніше присвоїти значення null Але звичайним типам не можна присвоювати значення null, тобто відсутність значення, їм потрібно прісваать якесь дійсне значення

Оголошення struct в наступному прикладі додатково демонструє огранованими звичайних типів:

struct ExampleStructure { int value

}

ExampleStructure ex = null

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

Нульові типи надають звичайним типами (наприклад, структурам) возмоость вести себе, як посилальні типи У С # нульовий тип визначається добавленм знака питання після оголошення типу:

ExampleStructure ex = null

Таким чином, нульові типи дозволяють привласнювати значення null звичайним там Щоб зробити це можливим, компілятор С # перетворює синтаксис С # для використання стандартної бібліотеки класу Nullable Замість використання нотації нульового типу, можна прямо використовувати тип systemNuliableo: SystemNullable ex = null

Розглянемо інший приклад, в якому не використовується нульовий тип:

int unknownl = 0 int knownl = 10

int resultl = unknownl + knownl

ExampleStructure unknown2 = new ExampleStructure(0) ExampleStructure known2 = new ExampleStructure(10) int result2 = unknown2value + known2value

У прикладі целочисленная мінлива unknowni представляє невідоме значиться, а змінна unknown2 типу Examplestructure – невідоме значення типу struct Невідомі змінні увазі, що їх значення не можуть бути визначені Але хоча значення змінних невідомі, їм необхідно присвоїти будь відомі значення У прикладі з цілочисельний змінної це озна використання 0 А у випадку з Examplestructure-створення екземпляра Examplestructure Коли змінним привласнені значення, з виконанням операх складання не буде ніяких проблем Але мається проблема з цим підходом, а саме: він неправильний Результатом будь-якої операції над відомим і неіестним значеннями має бути невідоме значення

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

int unknowni = null int knownl = 10

int resultl = (int)unknowni + knownl

Examplestructure unknown2 = null  Examplestructure known2 = new Examplestructure(10)

int result2 = ((Examplestructure)unknown2)value + known2value

У даному модифікованому прикладі unknowni і unknown2 є змінними нульового типу, і їм присвоєно значення null, щоб вказати невідоме стояння Для виконання операцій додавання необхідно провести невелику модифікацію складання, а саме здійснити приведення до типу Код, викорис нульові типи, функціонально ідентичний коду, який використовує толо звичайні типи Різниця полягає в тому, що при спробі виконати операцію складання генерується виключення System invalidOperation, яке вказує, що значення несумісні, і тому операцію не можна виконати Така поведінка є правильним і ясно ілюструє потреба в нульових типах

ПРИМІТКА

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

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

*

*