1. System. Object sinfi va uning usullari Umumlashtirish Umumlashganlarning cheklovlari
Download 48.75 Kb.
|
11 System Object asosiy tayanch sinfidan hosilaviy sinflarni yaratish
- Bu sahifa navigatsiya:
- 3.Umumlashganlarning cheklovlari Umumiy turlarga cheklovlar.
Umumlashtirilgan usullar
Umumiy sinflarga qo'shimcha ravishda siz umumiy parametrlarni xuddi shu tarzda ishlatadigan umumiy usullarni ham yaratishingiz mumkin. Masalan: class Program { private static void Main(string[] args) { int x = 7; int y = 25; Swap Console.WriteLine($"x={x} y={y}"); // x=25 y=7 string s1 = "hello"; string s2 = "bye"; Swap Console.WriteLine($"s1={s1} s2={s2}"); // s1=bye s2=hello Console.Read(); } public static void Swap { T temp = x; x = y; y = temp; } } U parametrlarni mos yozuvlar bo'yicha qabul qiladigan va ularning qiymatlarini o'zgartiradigan umumiy Swap usulini belgilaydi. Bundan tashqari, bu holda, bu parametrlar qaysi turni ifodalashi muhim emas. Main usulida biz Swap usulini chaqiramiz, uni ma'lum bir tur bilan yozamiz va unga ba'zi qiymatlarni o'tkazamiz. 3.Umumlashganlarning cheklovlari Umumiy turlarga cheklovlar. Umumiy parametrlar yordamida biz har qanday turdagi umumiy sinflarni yozishimiz mumkin. Biroq, ba'zida turni konkretlashtirish kerak bo'ladi. Masalan, bizda bank hisobini ifodalovchi quyidagi Account sinfi mavjud: class Account { public int Id { get; private set;} // hisob raqami public int Sum { get; set; } public Account(int _id) { Id = _id; } } Mablag'larni bir hisobdan ikkinchisiga o'tkazish uchun biz T_ransaction sinfini aniqlashimiz mumkin, bu sinfda barcha operatsiyalarni bajarish uchun A_ccount sinfi ob'ektlaridan foydalaniladi. Ammo Account sinfi ko'plab merosxo'rlarga ega bo'lishi mumkin: DepositAccount (depozit hisobi), DemandAccount (talab hisobi) va boshqalar. Transaction sinfida qaysi hisob turlari ishlatilishini bila olmaymiz. Tranzaktsiyalar faqat talab hisobvaraqlari o'rtasida amalga oshirilishi mumkin. Va bu holda, Account turi umumiy parametr sifatida o'rnatilishi mumkin: class Transaction { public T FromAccount { get; set; } // qaysi hisobdan pul o'tkazmasi public T ToAccount { get; set; } // pul o'tkazmasi qaysi hisob raqamiga public int Sum { get; set; } // o'tkazma summasi public void Execute() { if (FromAccount.Sum > Sum) { FromAccount.Sum -= Sum; ToAccount.Sum += Sum; Console.WriteLine($"Счет {FromAccount.Id}: {FromAccount.Sum}$ \nСчет {ToAccount.Id}: {ToAccount.Sum}$"); } else { Console.WriteLine($"{FromAccount.Id} hisobida pul yetarli emas"); } } } where T: Hisob ifodasidan foydalanib, biz foydalaniladigan T turi, albatta, Hisob sinfi yoki uning merosxo'ri bo'lishi kerakligini ko'rsatamiz. Ushbu cheklov tufayli biz Transaction sinfidagi barcha T tipidagi ob'ektlardan aynan A_ccount ob'ektlari sifatida foydalanishimiz va shunga mos ravishda ularning xususiyatlari va usullariga kirishimiz mumkin. Endi dasturda Transaction sinfini qo'llaymiz: class Program { static void Main(string[] args) { Account acc1 = new Account(1857) { Sum = 4500 }; Account acc2 = new Account(3453) { Sum = 5000 }; Transaction { FromAccount = acc1, ToAccount = acc2, Sum = 6900 }; transaction1.Execute(); Console.ReadLine(); } } E'tibor bering, faqat bitta sinf cheklov sifatida ishlatilishi mumkin. Umumiy sinf cheklovchi sifatida ham harakat qilishi mumkin: class Program { private static void Main(string[] args) { Account Account Transaction { FromAccount = acc1, ToAccount = acc2, Sum = 6900 }; transaction1.Execute(); Console.Read(); } } class Account { public T Id { get; private set; } // номер счета public int Sum { get; set; } public Account(T _id) { Id = _id; } } class Transaction { public T FromAccount { get; set; } // qaysi hisobdan pul o'tkazmasi public T ToAccount { get; set; } // pul o'tkazmasi qaysi hisob raqamiga public int Sum { get; set; } // o'tkazma summasi public void Execute() { if (FromAccount.Sum > Sum) { FromAccount.Sum -= Sum; ToAccount.Sum += Sum; Console.WriteLine($"Счет {FromAccount.Id}: {FromAccount.Sum}$ \nСчет {ToAccount.Id}: {ToAccount.Sum}$"); } else { Console.WriteLine($"{FromAccount.Id} hisobida pul yetarli emas"); } } } Bunday holda, Transaction sinfi Account Account Account // buni yozib bo'lmaydi, chunki Bank Account Transaction { FromAccount = acc1, ToAccount = acc2, Sum = 900 }; Cheklov sifatida quyidagi turlardan foydalanishimiz mumkin: Download 48.75 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling