// Ikkita qiymatni almashtirish.
using System;
class ValueSwap {
// Bu metod o'z argumentlarini o'zgartiradi.
public void Swap(ref int a, ref int b) {
int t;
t = a;
a = b;
b = t;
}
}
class ValueSwapDemo {
static void Main() {
ValueSwap ob = new ValueSwap();
int x = 10, у = 20;
Console.WriteLine("х и у до вызова: " + х + " " + у);
ob.Swap(ref x, ref у);
Console.WriteLine("х и у после вызова: " + х + " " + у);
}
}
Bu dasturning bajarilgandan keying natijasi.
х и у до вызова: 10 20
х и у после вызова: 20 10
Ref modifikatoriga nisbatan quyidagilarni yodda tutish kerak. Ushbu modifikator yordamida havola orqali uzatiladigan argumentga metod chaqirilishidan oldin qiymat berilishi kerak. Aslida, bunday argumentni parametr sifatida qabul qiladigan metodda parametr haqiqiy qiymatga ishora qiladi deb taxmin qilinadi. Shuning uchun, ref modifikatorini ishlatiladigan metodda hech qachon argumentga boshlang`ich qiymat berilmaydi.
Ba'zan mos havola parametrdan qiymatni uzatish uchun emas, balki metoddan qiymat olish uchun ishlatilishi mumkin. Aytaylik, ba'zi funksiyalarni bajaradigan metod mavjud, masalan, tarmoq rozetkasini qo`shish va ushbu operatsiyani muvaffaqiyatli yoki muvaffaqiyatsiz bajarish kodining mos havola parametri sifatida qaytarsin. Bunday holda, metodga hech qanday ma'lumotga yuborilmaydi, biroq ayni paytda u ma'lum bir ma'lumotni qaytarishi kerak. Bu holatda asosiy muammo agar metod ref tipli parametr orqali chqirilishidan oldin ma'lum bir qiymat bilan boshlanishi kerak edi. Shuning uchun, ref tipli parametrdan foydalanishda argumentga xayoliy qiymatni verish va bu cheklanishni bartaraf qilish kerak bo'ladi. Haqiqatda, C#da bunday muammodan chiqishning yanada qulay variant mavjud — bu out parametrining modifikatoridan foydalanish.
Do'stlaringiz bilan baham: |