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 uchun, count 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.
Do'stlaringiz bilan baham: |