Метод аргументлари
Метод аргументлари қиймат ва узатма бўйича берилиши мумкин. Методга узатма бўйича узатиладиган ўзгарувчилар устида амаллар бажарилиши мумкин. Чунки бу ҳолда методга қиймат сифатида ўзгарувчи манзили узатилади. C# тилида барча ўзгарувчилар қиймати бўйича узатилади:
using System;
class ParameterTest
{
//функция параметр сифатида int типига мансуб массив узатилади
static void SomeFunction(int[] Ints, int I)
{
Ints[0]=100;
I=100;
}
public static int Main()
{
int I=0;
int[] Ints={1, 2, 3, 4, 5, 8};
// бошлангич кийматларни аниклаймиз
Console.WriteLine("I= "+I);
Console.WriteLine("Ints[0]= "+Ints[0]);
Console.WriteLine("SomeFunction функциясини чакирамиз...");
// Ушбу чакиришдан сунг Ints киймати узгаради, I эса узгармайди
SomeFunction(Ints, I);
Console.WriteLine("I= "+I);
Console.WriteLine("Ints[0]= "+Ints[0]);
return 0;
}
}
Дастур ишга туширилгач, қуйидаги натижа ҳосил қилинади:
I = 0
Ints[0] = 1
SomeFunction функциясини чакирамиз...
I = 0
Ints[0] = 100
Бунда, I ўзгарувчи қиймати ўзгармади, Ints массив қийматида эса ўзгариш содир бўлди. Параметр сифатида узатилган сатрлар ҳам функция ичида ўзгармай қолади. Аммо параметрга ref калит сўзини қўллаш орқали қийматни функция ичидан узатиш мумкин. Агар методдаги параметр ref каби узатилса, метод ичида ўзгарувчига устида бажарилган барча ўзгартиришлар бошланғич қийматга таъсир ўтказади:
// Функция параметр сифатида массивни (узатма буйича тип)
// ва int (киймат буйича тип) типига мансуб кийматни кабул килади.
// Аммо иккинчи аргумент ref каби аниклангани учун
// узатма буйича узатилади.
static void SomeFunction(int[] Ints, ref int I)
{
Ints[0] = 100;
I = 100;
}
Метод чақирилганда параметрга ref калит сўзини қўллаш лозим.
SomeFunction(Ints, ref I);
out калит сўзи
C стилидаги тилларда функция бир нечта қиймат қайтариши мумкин. Бу эса қўшимча чиқарилувчи параметрларни ҳосил қилиш натижасида амалга оширилади. Кўп ҳолларда чиқарилувчи параметрларнинг бошланғич қийматлари маънога эга бўлмайди. Ушбу қийматлар функция орқали тозаланади. Кўп ҳолларда ушбу қийматлар умуман ишлатилмаслиги ҳам мумкин. Чиқарилувчи параметрларни out калит сўзи орқали ҳосил қилинади:
// Ушбу функция иницализация килинмаган киймталарни хам
// кабул килиши мумкин
static void SomeFunction(out int i)
{
i=100;
}
public static int Main()
{
// i эълон килинади, аммо бошлангич киймат берилмайди
int i;
SomeFunction(i);
Console.WriteLine(i);
return 0;
}
|