2. Abstrakt berilganlar va metodlar
Abstrakt metod - bu tanasi mavjud bo'lmagan, hamda faqatgina abstrakt sinfda ishlovchi metod hisoblanadi. Uni tanasi esa, voris sinfda taqdim etiladi.
MISOL:
using System;
// abstrakt class 'Hayvonlar'
public abstract class Hayvolar
{
// abstrakt metod 'Ovoz()'
public abstract void Ovoz();
}
// class 'Hayvolar' dan olingan voris class 'Sigir'
public class Sigir : Hayvolar
{
// Qayta ishlangan 'Ovoz()' metodi
public override void Ovoz()
{
Console.WriteLine("Moo");
}
}
class Program
{
static void Main(string[] args)
{
// Sigir obyektini yaratish
Sigir sigir_obj = new Sigir();
// abstrakt metodni chaqirish
sigir_obj.Ovoz();
}
}
Natija:Moo
Berilgan mavhum usulda tana yo'q va u faqat mavhum sinfda ko'rsatilgan. Override kalit so'zi barcha mavhum bo'lmagan sinflarda mavhum usulni amalga oshirish uchun ishlatilishi kerak. Mavhum usul bekor qilinganidan keyin endi mavhum bo'lmagan sinfda.
Bu sinf boshqa sinfdan olinishi mumkin, keyinchalik u bir xil mavhum usulni bekor qilishi mumkin. Mavhum funksiyalarga funksionallikni taklif qilish uchun mavhum sinfdan kichik sinf yaratish/olish kerak.
Mavhum usullar ko'pincha ikki yoki undan ortiq kichik sinflar bir xil vazifani boshqacha bajarishi kutilganda aytiladi. Subklasslar interfeysni amalga oshirish uchun tez-tez zarur bo'lganligi sababli, mavhum superklass mavhum usullarning o'zgarishlarini amalga oshirish uchun uni pastki sinflarga qoldirib, bir nechta interfeys usullarini taqdim etishi mumkin.
C# tilidagi mavhum usullar va abstrakt sinflar uchun qoidalar quyidagicha:
Agar usul mavhum, tashqi yoki qisman bo'lmasa, u mavhum modifikator yordamida mavhum belgilanishi kerak; aks holda kompilyatsiya vaqtida xatolik yuzaga keladi. Usul tanani e'lon qilishi kerak, chunki u mavhum, tashqi yoki qisman emas.
public class Demo
{
void k1();
}
2. Agar sinfda mavhum usul bo'lsa, u abstract kalit so'zi bilan shunday e'lon qilinishi kerak; aks holda kompilyatsiya vaqtida xatolik yuzaga keladi.
Demo.k1() usuli mavhum bo'lsa-da, u mavhum bo'lmagan Demo sinfiga kiritilgan:
public class Demo
{
public abstract void k1();
}
To'g'ri sintaksis:
public abstract class Demo
{
public abstract void k1();
}
Abstrakt sinfning kichik sinflari barcha mavhum usullarni bekor qilishi yoki sinf mavhum deb e'lon qilinishi kerak; aks holda kompilyatsiya vaqtida quyidagi xatolik yuzaga keladi:
namespace AbstractDemo
{
public abstract class Demo
{
public abstract void k1();
public abstract void k2();
}
public class Sample : Demo
{
public override void k1()
{
Console.WriteLine("k1 method");
}
}
}
Sinf abstraktini quyida ko'rsatilganidek e'lon qilamiz:
public abstract class Sample : Demo
{
public override void k1()
{
Console.WriteLine("k1 method");
}
}
Quyida ko'rsatilgandek barcha mavhum usullarni bekor qilamiz:
public class Sample : Demo
{
public override void k1()
{
Console.WriteLine("k1 method");
}
public override void k2()
{
Console.WriteLine("k2 method");
}
}
C# da mavhum usullardan foydalanishni ko'rsatish uchun demo:
using System;
namespace Abstractmethod
{
public abstract class Plan
{
protected double rate;
public abstract void getRate();
public void calculation(int units)
{
Console.Write("BILL AMOUNT FOR " + units + " UNITS is: USD.");
Console.WriteLine(rate * units);
}
}
class CommercialPlan : Plan
{
public override void getRate()
{
rate = 5.00;
}
}
class DomesticlPlan : Plan
{
public override void getRate()
{
rate = 2.50;
}
}
class Program
{
static void Main(string[] args)
{
Plan p;
Console.WriteLine("COMMERCIAL CONNECTION");
p = new CommercialPlan();
p.getRate();
p.calculation(250);
Console.WriteLine("DOMESTIC CONNECTION");
p = new DomesticlPlan();
p.getRate();
p.calculation(150);
Console.ReadKey();
}
}}
Dasturning chiqishi quyida ko'rsatilgandek bo'ladi:
COMMERCIAL CONNECTION
BILL AMOUNT FOR 250 UNITS is: USD.1250
DOMESTIC CONNECTION
BILL AMOUNT FOR 150 UNITS is: USD.375
Do'stlaringiz bilan baham: |