Employee sinfining obyekti o’z navbatida Person sinfining ham obyekti bo’lganligi sababli, o'zgaruvchini quyidagicha aniqlay olamiz :
Person p = new Employee();
Kelishuv bo’yicha, Vorislik oshkor ravishda ko’rsatilmasa ham, barcha sinflar Object tayanch sinfining vorisi hisoblanadi. Shuning uchun ham, yuqorida keltirilgan Person hamda Employee sinflari o'zlarining metodlaridan tashqari, Obyekt sinfining quyidagi metodlariga ham ega: ToString(), Equals(), GetHashCode() va GetType().
Kelishuv bo'yicha barcha sinflar voris qilib olinishi mumkin. Biroq, bu yerda bir qator cheklovlar mavjud: Person va Employee.
To’plamli vorislik qo'llanilmaydi, sinf faqat bitta sinfdan voris olishi mumkin.
Hosilaviy sinfni yaratishda tayanch sinfning kirish kaliti ham hisobga olinilishi zarur, yani hosilaviy sinfning kirish kaliti tayanch sinfniki bilan bir xil bo’lishi yoki undanda cheklovliroq bo'lishi talab etiladi. Ya'ni, agar tayanch sinf internal kirish kalitiga ega bo'lsa, hosilaviy sinf (voris sinf) ham internal yoki private kirish kalitiga ega bo’lishi mumkin, lekin public kirish kalitiga ega bo’lishi bo’la olmaydi.
Shuni hisobga olish kerakki, agar tayanch va hosilaviy sinflar har xil loyihalarda bo'lsa, unda hosilaviy sinf faqat public modifikatorga ega bo'lgan sinfdan voris olinishi mumkin.
Agar sinf sealed modifikator bilan e'lon qilingan bo'lsa, u holda ushbu sinfdan voris olib bo’lmaydi. Masalan, quyidagi sinfdan voris olib bo'lmaydi:
sealed class Admin
{
}
Statik sinfdan voris olib bo’lmaydi.
using System;
namespace ShaKhzod
{
class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public void Display()
{
Console.WriteLine(Name);
}
}
class Employee : Person
{
static void Main(string[] args)
{
Person p = new Person { Name = "Tom" };
p.Display();
p = new Employee { Name = "Sam" };
p.Display();
Console.Read();
}
}
}
Do'stlaringiz bilan baham: |