1-Mavzu 1-Mavzu Reja: Klass a’zolariga ruxsatni boshqarish


// Ikkita havolani almashtirish


Download 116.94 Kb.
bet38/100
Sana02.01.2022
Hajmi116.94 Kb.
#200801
1   ...   34   35   36   37   38   39   40   41   ...   100
Bog'liq
dasturiy injinering

// Ikkita havolani almashtirish.

using System;

class RefSwap {

int a, b;

public RefSwap(int i, int j) {

a = i;

b = j;

}

public void Show() {

Console.WriteLine ("a: {0}, b: {1}", a, b);

}

// Ushbu usul o'z argumentlarini almashtiradi,

public void Swap(ref RefSwap ob1, ref RefSwap ob2) {

RefSwap t;

t = ob1;

ob1 = ob2;

ob2 = t;

}

}

class RefSwapDemo {

static void Main() {

RefSwap x = new RefSwap(1, 2);

RefSwap у = new RefSwap(3, 4);

Console.Write("x до вызова: ");

x.Show();

Console.Write("у до вызова: ");

у.Show() ;

Console.WriteLine ();

// X va y argumentlari bilan bog'liq bo'lgan argumentlarni o'zgartirish.

х.Swap(ref x, ref у);

Console.Write("х после вызова: ");

х.Show();

Console.Write("у после вызова: ");

у.Show();

}

}

Ushbu dasturni ishlatilganda quyidagi natijalar olinadi.

х до вызова: а: 1, b: 2

у до вызова: а: 3, b: 4

х после вызова: а: 3, b: 4

у после вызова: а: 1, b: 2

Ushbu misolda, Swap() metodining ikkita argumenti bilan bog'liq bo'lgan ob'ektlarning almashinishi amalga oshiriladi. Swap() metodini chaqirishdan oldin havola qilingan x ob`ektning argumentlari 1 va 2 qiymatlarini o'z ichiga oladi, argument y esa 3 va 4 qiymatlarini o'z ichiga olgan ob'ektga ishora qiladi. Swap() metodi chaqirilganidan keyin ob`ektga havola qilingan x argumentning qiymatlari 3 va ga, y argument qiymatlari esa 1 va 2 ga teng bo`ladi. Agar parametrlarining tipi ref bo`lmaganda, ushbu almashtirishning Swap() metodidan tashqarida hech qanday ta'siri bo`lmas edi. Buni Swap() metodi parametrlarining ref tipini o`chirib tekshirib ko`rish mumkin.

Argumentlarning o'zgaruvchan miqdoridan foydalanish.


Odatda, metod yaratishda unga beriladigan argumentlarning soni har doim ham oldindan ma'lum bo`lavermaydi. Ba'zida argumentlar sonini ixtiyoriy bo'lgan metodni yaratishga to`g`ri keladi. Keling, bir qator qiymatlar orasidan eng kichigini aniqlaydigan metod kerak bo`lsin. Ushbu metodda kamida ikki, uch, to'rt yoki undan ortiq qiymatlar berilishi mumkin. Lekin, har qanday holatda ham metod bu qiymatlarning eng kichikini qaytarishi zarurdir. Ushbu usulni odatdagi parametrlar yordamida yaratib bo`lmaydi. Buning o'rniga, parametrning maxsus turini ishlatish kerak, bu parametrlarning tasodifiy sonini belgilaydi. Bu params turi parametri yordamida amalga oshiriladi.

Noltadan bir nechtagacha argumentlarni qabul qilishga qodir parametrlar massivini e'lon qilish uchun params modifikatori xizmat qiladi. Parametrlar massivi elementlarining soni metodga uzatilgan argumentlar soniga teng bo'ladi. Argumentlarni olish uchun dasturda ushbu massivdan foydalanish mumkin bo`ladi.

Quyidagi dastur misolida berilgan bir qator qiymatlar orasidan eng kichik qiymatni qaytarish uchun yharatilgan MinVal() metodida params modifikatoridan foydalanilgan.

// Params modifikatoridan foydalanish misoli.

using System;

class Min {

public int MinVal(params int[] nums) {

int m;

if(nums.Length ==0) {

Console.WriteLine("Ошибка: нет аргументов.");

return 0;

}

m = nums[0];

for(int i=1; i < nums.Length; i++){

if(nums[i] < m) m = nums[i];

return m;

}

}

class ParamsDemo {

static void Main() {

Min ob = new Min();

int min;

int a = 10, b = 20;

// Metodni ikkita qiymat bilan chaqirish.

min = ob.MinVal(a, b);

Console.WriteLine("Наименьшее значение равно " + min);

// Metodni uchta qiymat bilan chaqirish,

min = ob.MinVal(a, b, -1);

Console.WriteLine("Наименьшее значение равно " + min);

// Metodni beshta qiymat bilan chaqirish.

min = ob.MinVal(18, 23, 3, 14, 25);

Console.WriteLine("Наименьшее значение равно " + min);

// Metodni butun sonli massiv qiymatlari bilan chaqirish.

int[] args = { 45, 67, 34, 9, 112, 8 };

min = ob.MinVal(args);

Console.WriteLine("Наименьшее значение равно " + min);

}

}

Ushbu dastur bajarilganda quyidagi natijalar olinadi.

Наименьшее значение равно 10

Наименьшее значение равно -1

Наименьшее значение равно 3

Наименьшее значение равно 8

Qachon, MinVal() metodi chaqirilsa, unga nums massiv argumenti uzatiladi Ushbu massivning uzunligi uzatilgan argumentlar soniga teng. Shuning uchunMinVal() metodi yordamida har qanday miqdordagi qiymatlar orasidan eng kichigini aniqlash mumkin.

MinVal() metodining oxirgi chaqirilishiga e'tibor bering. Bu holda alohida qiymatlar o`rniga bir qator qiymatlarni o`z ichiga olgan massiv uzatilgan. Argumentlarni bunday uzatish mumkin. params turida parametr yaratilganda, u o'zgarmaydigan uzunlikdagi argumentlar ro'yxatini yoki argumentlarni o'z ichiga olgan massivni taniy oladi.

 

Params turdagi parametrga ixtiyoriy sondagi argumentlari yuborish mumkinligiga qaramay, ularning hammasi parametr uchun belgilangan bitta tipga tegishli bo`lishi kerak. Misol uchun, MinVal() metodini bunday chaqirish



min = ob.MinVal(1, 2.2); // Noto`g`ri!

bu yaroqsiz hisoblanadi, MinVal() metodida avtomatik ravishda tipni almashtirish mumkin emas, chunki double (2.2 qiymati)  nums massivi uchun belgilangan int tipida emas.

params modifikatoridan chegara shartlariga rioya qilgan holda ehtiyotkorlik bilan foydalanish kerak, chunki params turi parametri har qanday miqdordagi argumentlarni ham qabul qilishi mumkin — hatto nolta! Misol uchun, quyidagi kod MinVal() metodini chaqirish С# tilida sintaksis nuqtai nazaridan to'g'ri hisoblanadi.

min = ob.MinVal(); // нет аргументов

min = ob.MinVal(3); // 1 аргумент

Shuning uchun, MinVal() metodida nums massividan elementlarni olishdan  oldin uni kamida bitta element mavjudligiga tekshirilgan. Agar bunday tekshiruv bo'lmasa, dastur bajarilish davomida MinVal() metodini argumentlarsiz chaqirilsa istisno holat yuzaga keladi. (Istisno holatlar haqida batafsil ma'lumot 13-bobda muhokama qilinadi.) Bundan tashqariMinVal() metodi kodi bitta argument bilan chaqirilishi mumkin bo'lgan hol uchun yozilgan. Bunday holda, bu yagona argument natija sifatida qaytadi.

Usul oddiy parametrlarga va o'zgarmaydigan uzunlikdagi parametrga ega bo'lishi mumkin. Misol sifatida, quyida dasturni qaraylik, unda ShowArgs() metodi bitta string tipli parametr, shuningdek butun tipli massiv sifatida params parametr turini qabul qiladi.

// params o'zgaruvchan uzunlik parametri bilan birga oddiy

//parametrdan foydalanish.

using System;

class MyClass {

public void ShowArgs(string msg, params int[] nums) {

Console.Write(msg + ": ");

foreach(int i in nums)

Console.Write (i + " ");

Console.WriteLine ();

}

}

class ParamsDemo2 {

static void Main() {

MyClass ob = new MyClass ();

ob.ShowArgs("Это ряд целых чисел",

1, 2, 3, 4, 5);

ob.ShowArgs("А это еще два целых числа ",

17, 20);

}

}

Ushbu dasturning natijasi

Это ряд целых чисел: 1, 2, 3, 4, 5

А это еще два целых числа: 17, 20

Bitta metodda oddiy parametr va o'zgaruvchan uzunlik params parametri mavjud bo`lsa, o'zgaruvchan uzunlik parametri metodning parametrlari ro'yxatining oxirida ko'rsatilishi kerak. Lekin har qanday holatda ham params turdagi parametr yagona bo'lishi kerak.

Download 116.94 Kb.

Do'stlaringiz bilan baham:
1   ...   34   35   36   37   38   39   40   41   ...   100




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling