Asosiy kalit so'z. Endi sinflarimizga konstruktorlarni qo'shaylik:
class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public void Display()
{
Console.WriteLine(Name);
}
}
class Employee : Person
{
public string Company { get; set; }
public Employee(string name, string company)
: base(name)
{
Company = company;
}
}
Person sinfida Name xususiyatini o'rnatuvchi konstruktor mavjud. Employee sinfi bir xil Name xususiyatini meros qilib oladigan va o'rnatganligi sababli, o'rnatish kodini yuz marta yozmaslik, lekin qandaydir tarzda Person sinfining tegishli kodini chaqirish mantiqan to'g'ri bo'ladi. Bundan tashqari, asosiy sinfning konstruktorida o'rnatilishi kerak bo'lgan yana bir qancha xususiyatlar va parametrlar bo'lishi mumkin.
base kalit so'zi bilan biz asosiy sinfga murojaat qilishimiz mumkin. Bizning holatimizda biz "Employee" sinfining konstruktorida nom va kompaniyani belgilashimiz kerak. Ammo biz o'rnatish uchun nomni base(name) ifodasi yordamida tayanch sinf konstruktoriga, ya'ni Person sinf konstruktoriga beramiz.
static void Main(string[] args) { Person p = new Person("Bill"); p.Display(); Employee emp = new Employee ("Tom", "Microsoft"); emp.Display(); Console.Read(); }
Hosil qilingan konstruktorlar. Konstruktorlar meros olayotganda olingan sinfga o'tmaydi. Va agar asosiy sinf parametrlarsiz standart konstruktorni aniqlamasa, faqat parametrlarga ega bo'lgan konstruktorlarni (Person bazasi bilan bo'lgani kabi) aniqlasa, u holda hosil bo'lgan sinfda biz ushbu konstruktorlardan birini tayanch kalit so'z orqali chaqirishimiz kerak. Masalan, Employee sinfidan konstruktor ta'rifini olib tashlang:
class Employee : Person { public string Company { get; set; } } Bunday holda biz xatoga yo'l qo'yamiz, chunki Employee klassi Person sinfiga to'g'ri kelmaydi, ya'ni u asosiy sinf konstruktorini chaqirmaydi. Agar biz bir xil xususiyatlarni o'rnatadigan biron bir konstruktorni qo'shsak ham, biz xatoga yo'l qo'yamiz:
public Employee(string name, string company) { Name = name; Company = company; } Ya'ni, Employee sinfida asosiy kalit so'z orqali Person sinfining konstruktorini aniq chaqirishingiz kerak:
public Employee(string name, string company) : base(name) { Company = company; } Shu bilan bir qatorda, biz asosiy sinfda parametrsiz konstruktorni aniqlashimiz mumkin:
class Person { // sinf kodining qolgan qismi // standart konstruktor public Person() { FirstName = "Tom"; Console.WriteLine("Parametrlarsiz konstruktorni chaqirish"); } } Keyin asosiy sinfning konstruktoriga havola bo'lmagan har qanday hosil qilingan sinfning har qanday konstruktorida ushbu standart konstruktor hali ham yashirincha chaqiriladi. Masalan, quyidagi konstruktor.
public Employee(string company) { Company = company; } Aslida quyidagi konstruktorga teng bo'ladi:
public Employee(string company):base() { Company = company; }