русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Параметри-посилання


Дата додавання: 2015-01-08; переглядів: 1352.


 

Якщо метод повинен повертати більш за одну величину потрібно змінити значення яких-небудь переданих в нього величин. У цих випадках використовуються параметри-посилання.

Ознакою параметра-посилання є ключове слово ref :

 

ref тип ім'я

Приклад заголовка методу, що має один параметр-посилання цілого типу:

void Р( ref int х )

 

При виклику методу в область параметрів копіюється не значення аргументу, а його адреса, і метод через нього має доступ до осередку, в якому зберігається аргумент. Таким чином, параметри-посилання передаються за адресою (частіше вживається термін «передача по посиланню»). Метод працює безпосередньо із змінною функції і, отже, може її змінити, тому якщо в методі потрібно змінити значення параметрів, вони повинні передаватися тільки по посиланню.

Проілюструємо передачу параметрів-значень і параметрів-посилань на прикладі лістингу 5.4.

 

Лістинг 5.4. Параметри - значення і параметри - посилання

using System;

namespace ConsoleApplicationl

{

class Class1

{

static void P( int a, ref int b )

{

a = 44; b = 33;

Console.WriteLine( "усередині методу {0} {1}", a, b );

}

 

static void Main( )

{

int a = 2, b = 4;

Console.WriteLine( "до виклику {0} {1}", a, b );

P( a, ref b );

Console.WriteLine( "після виклику {0} {1}", a, b );

}

}

}

 

Результат роботи цієї програми:

до виклику 2 4

усередині методу 44 33

після виклику 2 33

 

Як бачите, значення змінної а у функції Main не змінилося, оскільки змінна передавалася за значенням, а значення змінної b змінилося тому, що вона була передана по посиланню. Декілька інша картина вийде, якщо передавати в метод не величини значущих типів, а екземпляри класів, тобто величини посилальних типів. Як ви пам'ятаєте, змінна-об'єкт насправді зберігає посилання на дані, розташовані в динамічній пам'яті, і саме це посилання передається в метод або за адресою, або за значенням. У обох випадках метод отримує в своє розпорядження фактичну адресу даних і, отже, може їх змінити.

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

 


<== попередня лекція | наступна лекція ==>
Тип ім’я | Вихідні параметри


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн