Параметри звичайних типів в Visual C # (Sharp)

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

static void Method(MyValueType value, MyReferenceType reference)

{

value, value = 10 referencevalue = 10

}

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

MyValueType value = new MyValueType() MyReferenceType reference = new MyReferenceType() Method(value, reference)  ConsoleWriteLine(&quotvalue value=&quot + valuevalue +

&quot reference value=&quot + referencevalue)

Викликає код створює екземпляри типів MyValueType І MyReferenceType, вивала метод Method (), після чого досліджує значення елементів даних звичайного і посилального типів

Результат виконання коду буде наступним:

value value=0 reference value=10

Як можна бачити, елемент даних звичайного типу (MyVaiueType) не змінено, в той час як елемент даних посилального типу (MyReferenceType) був змінений Це правильний результат, який демонструє, що при виклику методу його паметри призначаються змінним в викликається методі Звернувшись до табл 41, можна бачити, що при присвоєнні значення звичайного типу подальше маніпірованіе присвоєним екземпляром не впливає на початковий екземпляр

Це означає, що модифікування звичайних типів у методі не відбивається поза методу Тому на практиці в більшості випадків потрібно використовувати ссилоие типи Але середу CLR пропонує рішення даної проблеми у вигляді ключового слова out, яке застосовується при виклику методу (рис 46) Воно вказує, що змінна призначається з повернення методу, а не при його виклику

Рис 46 Використання ключового слова out при передачі параметрів

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

static void Method(ref MyValueType value, MyReferenceType reference) { valuevalue = 10

referencevalue = 10

}

MyValueType value = new MyValueType() MyReferenceType reference = new MyReferenceType() Method(ref value, reference) ConsoleWriteLine(&quotvalue value=&quot + valuevalue +

&quot reference value=&quot + referencevalue)

При використанні ключового слова ref звичайний тип перетворюється в посилальний, тому, щоб викликати метод MethodO, змінної повинен бути присвоєний дейсітельний екземпляр класу звичайного типу

ПРИМІТКА

По тому, як використовуються ключові слова out і ref, можна бачити, що С # являея явно певною мовою Ключові слова out і ref вказуються як при обвленіі методу, так і при його виклику Програмуючи в С #, ви завжди знаєте, що дає будь-який параметр, метод, змінна або клас і як вони це роблять Завдяки цій визначеності, розробники можуть читати і розуміти код, створений іншими розробниками

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

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

*

*