Параметр-қиймат усул сарлавҳасида қуйидагича кўринишда белгиланади:
тип ном
Битта параметр-қийматга эга бўлган усул сарлавҳасига намуна:
void P( int x )
Параметр номи иҳтиёрийча бўлиши мумкин. х параметр локал ўзгарувчи бўлиб, ўз қийматини чақирувчи функциядан усулга мурожаат вақтида олади. Усулга аргумент қийматининг нусхаси узатилади.
Маълумотларни узатиш механизми қуйидагича: усулга узатилаётган ўзгарувчи сақланаётган хотира ячейкасидан унинг қиймати олинади ва нусхаси хотиранинг махсус қисмига — параметрлар соҳасига кўчирилади. Усул ўз ишини тугатганидан кеийн бу соҳа бўшатилади. Бундай усул фақат усулга бошланғич маълумотларни узатишда қўлланилади.
Усул чақирилганда қиймат бўича узатиладиган параметр ўрнида ифода туриши ҳам мумкин. Масалан, айтайлик, чақирувч фунцияда ўзгарувчилар тавсифланган бўлсин хамда уларга усулга мурожаат қилингунча қийматлар берилган бўлсин:
int x = 1;
sbyte c = 1;
ushort y = 1;
У холда саралвҳаси илгари тавсифланган P усулга қуйидаги мурожаатлар синтактик жиҳатдан тўғри ҳисобланади: сически правильными:
P( x ); P( c ); P( y ); P( 200 ); P( x / 4 + 1 );
Параметр-ҳаволалар
Параметр-ҳаволаларнинг аломатлари парамтердан олдин кўрсатилган ref хизматчи сўзи билан белгиланади:
ref тип ном
бутун типдаги батта параметр-ҳаволага эга бўлган усул сарлавҳаси қуйидагича:
void P( ref int x )
Усул чақирилганда параметрлар соҳасига аргументнинг манзили кўчирилади ва усул бу манзил орқали аргумент сақланаётган хотира ячейкаси билан ишлашга рухсат олади. Усул бевосита чақирувчи функциядаги ўзгарувчи билан ишлайди, ва демак, уни ўзгартириши мумкин. Шунинг учун агар усулда параметрларнинг қийматларини ўзгартиришга зарурат бўлса, улар фақат ҳаволалар орқали узатилиши лозим.
Диққат
Усул чақирилганда параметр-ҳаволалар ўрнида фақат типи мос бўлган ва инициаллаштирилган ўзгарувчи туриши мумкин. Парамтер номидан олдин ref хизматчи сўзи ёзилади.
Апраметр-қиймат ва параметр-ҳаволаларни узатишга намуна келтирамиз (17.4-листинг).
using System;
namespace ConsoleApplication1
{ 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 );
}
}
}
17.4-листинг. Параметр-қийматлар ва параметр-ҳаволалар
Дастурнинг натижалари:
мурожаатгача 2 4
усул ичида 44 33
мрожаатдан кейин 2 33
Агар усулга қийматли типларнинг қийматлари эмас, балки синф экземплярлар, яъни ҳавола типидаги миқдорлар узатилса бу холат бошқача бўлиши мумкин. Соддалик учун объектларни доимо ҳаволалар бўйича узатилади деб ҳисоблаш мумкин.
Do'stlaringiz bilan baham: |