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


Download 116.94 Kb.
bet56/100
Sana02.01.2022
Hajmi116.94 Kb.
#200801
1   ...   52   53   54   55   56   57   58   59   ...   100
Bog'liq
dasturiy injinering

class MyClass {

// Nonsatik metod

void NonStaticMeth() {

Console.WriteLine("В методе NonStaticMeth().");

}

/* static metod nostatik metodga ob'ektga havola orqali murojaat qilishi mumkin. */

public static void staticMeth(MyClass ob) {

ob.NonStaticMeth(); // все верно!

}

}

Ushbu misolda NonStaticMeth() metodi MyClass tipidagi ob obektiga havola orqali Staticmeth() metodidan chaqirilyapti.

static tipidagi maydonlar muayyan ob'ektga bog'liq bo`lmaganligi uchun ular butun sinfga tegishli ma'lumotlarni saqlash uchun qulaydir. Quyida shunga o'xshash vaziyatni ko'rsatadigan dasturning namunasi keltirilgan. Ushbu dasturdagi static turili maydon mavjud ob'ektlar sonini saqlashga xizmat qiladi.

// Mavjud ob'ektlarning nusxalari sonini

//hisoblashda static turi maydonidan foydalanish.

using System;

class CountInst {

static int count = 0;

// Ob'ekt yaratilganda hisoblashni oshirish.

public CountInst() {

count++;

}

// Ob'ektni yo'q qilish vaqtida hisoblashni bekor qilish.

~CountInst() {

Count--;

}

public static int GetCount() {

return count;

}

}

class CountDemo {

static void Main() {

CountInst ob;

for(int i=0; i < 10; i++) {

ob = new CountInst ();

Console.WriteLine("Текущий подсчет: " + CountInst.GetCount()) ;

}

}

}

Ushbu dasturning bajarilishidan quyidagi natijalar olinadi.

Текущий подсчет: 1

Текущий подсчет: 2

Текущий подсчет: 3

Текущий подсчет: 4

Текущий подсчет: 5

Текущий подсчет: б

Текущий подсчет: 7

Текущий подсчет: 8

Текущий подсчет: 9

Текущий подсчет: 10

CountInst tipidagi ob'ekt yaratilganda, static turili count maydoni ortadi. Lekin qachon bunday ob'ekt o`chirilsa, count maydon yuklanadi. Shuning uchuncount maydoni har doim mavjud bo'lgan ob'ektlar sonini o'z ichiga oladi. Va bu faqat static turdagi maydondan foydalanish orqali amalga oshiriladi. Shu kabi hisob-kitoblarni nusxa o`zgaruvchisi yordamida tashkil etish mumkin emas, chunki u butun sinfga tegishli bo'lib, bu sinfning muayyan ob'ekti nusxasiga tegishli emas.

 Quyida sinfning static a'zolarini qo'llashning yana bir misoli keltirilgan. Ushbu bo'limda ilgari fabrika sinfi yordanida qanday qilib ob`ekt yaratilishini ko'rsatdi. Ushbu misolda fabrika static metod emas edi, ya'ni fabrika metodi faqat oldindan yaratilgan ob'ektga havola orqali chaqirilishi mumkin edi. Lekin sinfning keraksiz ob'ektini yaratmagan holda fabrika metodini chaqirish imkonini beradigan static turili metod sifatida amalga oshirish yaxshiroq hisoblanadi. Bu takomillashtirish va sinfda fabrikani amalga oshirish dasturi quyidagi tahrirlangan misolda aks etadi



//Sinfda statik fabrikadan foydalanish.

using System;

class MyClass {

int a, b;

// MyClass sinfi uchun fabrika yaratish.

static public MyClass Factory(int i, int j) {

MyClass t = new MyClass();

t.a = i;

t.b = j;

return t; // ob'ektni qaytarish

}

public void Show() {

Console.WriteLine("а и b: " + a + " " + b);

}

}

class MakeObjects {

static void Main() {

int i, j;

// Fabrika yordamida ob'ektlarni shakllantirish.

for(i=0, j=10; i < 10; i++, j --) {

MyClass ob = MyClass.Factory(i, j); // ob'ekt  yaratish

ob.Show();

}

Console.WriteLine() ;

}

}

Dasturning ushbu versiyasida fabrika metodi Factory() quyidagi kod satrida sinf nomi bilan chaqiriladi.

MyClass ob = MyClass.Factory(i, j); // ob'ekt  yaratish

Endi bu sinfda fabrikani ishlatishdan oldin MyClass sinfining ob'ektini yaratishga hojat yo'q.

Download 116.94 Kb.

Do'stlaringiz bilan baham:
1   ...   52   53   54   55   56   57   58   59   ...   100




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