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)