1-Mavzu: Statik berilganlar, statik metodlar, statik sinflar Reja



Yüklə 40,53 Kb.
səhifə1/2
tarix02.06.2023
ölçüsü40,53 Kb.
#122623
  1   2
1-Mavzu Statik berilganlar, statik metodlar, statik sinflar


1-Mavzu: Statik berilganlar, statik metodlar, statik sinflar
Reja
1. Statik a'zolar va static modifikatori
2. Statik konstruktor
3. Statik sinflar


1. Statik a'zolar va static modifikatori
Oddiy maydonlar, usullar, xususiyatlardan tashqari, sinf statik maydonlar, usullar, xususiyatlarga ega bo'lishi mumkin. Statik maydonlar, usullar, xususiyatlar butun sinfga tegishli va bunday sinf a'zolariga kirish uchun sinfning namunasini yaratish shart emas. Masalan:
class Account
{
public static decimal bonus = 100;
public decimal totalSum;
public Account(decimal sum)
{
totalSum = sum + bonus;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Account.bonus); // 100
Account.bonus += 200;
Account account1 = new Account(150);
Console.WriteLine(account1.totalSum); // 450
Account account2 = new Account(1000);
Console.WriteLine(account2.totalSum); // 1300
Console.ReadKey();
}
}

Bu holda, Account sinfida ikkita maydon mavjud: bonus va totalSum. Bonus maydoni statikdir, shuning uchun u alohida holat emas, balki butun sinf holatini saqlaydi. Va shuning uchun biz ushbu maydonga sinf nomi bilan murojaat qilishimiz mumkin:


Console.WriteLine(Account.bonus);
Account.bonus += 200;

Xotira darajasida statik maydonlar uchun xotira bo'limi yaratiladi, bu sinfning barcha ob'ektlari uchun umumiy bo'ladi.



Bunday holda, statik o'zgaruvchilar uchun xotira ajratiladi, hatto bu sinf ob'ektlari yaratilmagan bo'lsa ham.
Statik xususiyatlar va usullar. Xuddi shunday, biz statik usullar va xususiyatlarni yaratishimiz va ishlatishimiz mumkin:
class Account
{
public Account(decimal sum, decimal rate)
{
if (sum < MinSum) throw new Exception("Noto'g'ri miqdor!");
Sum = sum; Rate = rate;
}
private static decimal minSum = 100; // barcha hisoblar uchun ruxsat etilgan minimal miqdor
public static decimal MinSum
{
get { return minSum; }
set { if(value>0) minSum = value; }
}
public decimal Sum { get; private set; } // hisobdagi summa
public decimal Rate { get; private set; } // Stavka foizi
// hisobdagi summani ma'lum muddatdan keyin ma'lum tezlikda hisoblash
public static decimal GetSum(decimal sum, decimal rate, int period)
{
decimal result = sum;
for (int i = 1; i <= period; i++)
result = result + result * rate / 100;
return result;
}
}

minSum o'zgaruvchisi, MinSum xususiyati va GetSum usuli bu erda static kalit so'zi bilan aniqlangan, ya'ni ular statik.


minSum o'zgaruvchisi va MinSum xususiyati schyot -fakturani tuzishga ruxsat berilgan minimal miqdorni bildiradi. Bu indikator hech qanday alohida hisobni nazarda tutmaydi, balki umuman barcha hisoblarni bildiradi. Agar biz bu raqamni bitta hisob uchun o'zgartirsak, u boshqa hisob uchun ham o'zgarishi kerak. Ya'ni, ob'ekt holatini saqlaydigan Sum va Rate xususiyatlaridan farqli o'laroq, m_inSum o'zgaruvchisi bu sinfning barcha ob'ektlari uchun holatni saqlaydi.
GetSum usuli bilan ham xuddi shunday - u hisobdagi summani ma'lum vaqtdan keyin ma'lum bir boshlang'ich summa uchun ma'lum foiz stavkasi bo'yicha hisoblab chiqadi. Bu usulning chaqiruvi va natijasi ma'lum bir ob'ektga yoki uning holatiga bog'liq emas.
Shunday qilib, sinfdagi barcha ob'ektlar uchun umumiy holatni saqlaydigan o'zgaruvchilar va xususiyatlar statik deb ta'riflanishi kerak. Shuningdek, barcha ob'ektlarga xos bo'lgan xatti -harakatlarni belgilaydigan usullar ham statik deb e'lon qilinishi kerak.
Sinfning statik a'zolari bu sinfning barcha ob'ektlari uchun umumiydir, shuning uchun ularga sinf nomi bilan murojaat qilish kerak:
Account.MinSum = 560;
decimal result = Account.GetSum(1000, 10, 5);

Shuni yodda tutish kerakki, statik usullar faqat sinfning statik a'zolariga kira oladi. Biz statik bo'lmagan usullarga, maydonlarga, xususiyatlarga murojaat qila olmaymiz.


Statik maydonlar tez -tez hisoblagichlarni saqlash uchun ishlatiladi. Misol uchun, bizda User sinfi bor va biz qancha User ob'ektlari yaratilganligini bizga bildiradigan hisoblagichga ega bo'lishni xohlaymiz:
class User
{
private static int counter = 0;
public User()
{
counter++;
}
public static void DisplayCounter()
{
Console.WriteLine($"{counter} User ob'ektlari yaratildi ");
}
}
class Program
{
static void Main(string[] args)
{
User user1 = new User();
User user2 = new User();
User user3 = new User();
User user4 = new User();
User user5 = new User();
User.DisplayCounter(); // 5
Console.ReadKey();
}
}



Yüklə 40,53 Kb.

Dostları ilə paylaş:
  1   2




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin