C# da ref
, out
va in
tushunchalari
C# dasturlash tilida metodlarga parametr (argument) uzatishning turli usullari mavjud.
Ko‘p hollarda oddiy qiymat uzatiladi, lekin ba’zan bizga qiymatni havola (reference) orqali uzatish kerak bo‘ladi.
Shu yerda ref
, out
va in
kalit so‘zlari yordamga keladi.
Keling, ularni sodda misollar bilan tushunib chiqamiz. 🚀
Oddiy uzatish (by value)
void ChangeValue(int x)
{
x = 100;
}
int num = 5;
ChangeValue(num);
Console.WriteLine(num); // 5 chiqadi
👉 Oddiy holatda qiymat nusxasi metodga yuboriladi.
Shuning uchun tashqaridagi num
o‘zgarmaydi.
ref
kalit so‘zi
void ChangeValue(ref int x)
{
x = 100;
}
int num = 5;
ChangeValue(ref num);
Console.WriteLine(num); // 100 chiqadi ✅
✅ ref
orqali qiymat havola sifatida yuboriladi.
⚠️ Lekin ref
ishlatishdan oldin parametrga qiymat berilishi shart.
ishlash diagrammasi tushunish uchun
out
kalit so‘zi
void GetValues(out int a, out int b)
{
a = 10;
b = 20;
}
int x, y;
GetValues(out x, out y);
Console.WriteLine($"{x}, {y}"); // 10, 20 chiqadi ✅
✅ out
orqali ham qiymat havola orqali yuboriladi, lekin metod ichida qiymat berilishi majburiy.
Bu ko‘pincha bitta metoddan bir nechta qiymat qaytarish uchun ishlatiladi.
in
kalit so‘zi
void PrintValue(in int x)
{
// x = 50; ❌ Error – o‘zgartirib bo‘lmaydi
Console.WriteLine(x);
}
int num = 30;
PrintValue(in num); // 30 chiqadi ✅
✅ in
parametri havola orqali yuboriladi, lekin metod ichida o‘zgartirish mumkin emas.
Bu usul katta obyektlarni nusxa qilmasdan samarali uzatish uchun ishlatiladi.
Xulosa
-
ref
→ qiymatni havola orqali uzatadi, o‘zgartirish mumkin. -
out
→ havola orqali uzatadi, lekin metod ichida qiymat berish majburiy. -
in
→ havola orqali uzatadi, lekin metod ichida o‘zgartirish mumkin emas.
static void Main()
{
int a = 5; // ref uchun kirish qiymati mavjud
int b; // out uchun kirish qiymati yo‘q
int c = 10; // in uchun faqat o‘qiladi
Console.WriteLine($"Boshlang‘ich qiymatlar: a={a}, c={c}");
ProcessValues(ref a, out b, in c);
Console.WriteLine($"Natija: a={a}, b={b}, c={c}");
}
static void ProcessValues(ref int x, out int y, in int z)
{
x += 10; // ref parametr o‘zgartiriladi
y = z * 2; // out parametrga qiymat beriladi
Console.WriteLine($"Funksiya ichida: x={x}, y={y}, z={z}");
// z += 5; // Xato! in parametr o‘zgarmaydi
}
}
// natija
// Boshlang‘ich qiymatlar: a=5, c=10
// Funksiya ichida: x=15, y=20, z=10
// Natija: a=15, b=20, c=10
Top comments (0)