Middle
C# da metodlarni qayta yozish va yashirish o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Overriding (override) polimorfizmni amalga oshirish uchun ishlatiladi, bu orqali voris sinf virtual, abstrakt yoki meros olingan metodning o'z versiyasini taqdim etadi. virtual kalit so'zi asosiy sinfda va override kalit so'zi voris sinfda majburiy.
Hiding (hiding, shadowing) esa voris sinfda bir xil nomdagi metod bilan amalga oshiriladi, u asosiy sinfdan metodni yashiradi. Asosiy sinfdagi metod saqlanadi, ammo unga voris sinf ob'ektidan kirish aniq turga yoki base kalit so'zi orqali amalga oshiriladi. Voris sinfda new kalit so'zi ishlatiladi.
| Xususiyat | Override (Qayta yozish) | Hiding (Yashirish) |
|---|---|---|
| Kalit so'z | virtual (asosiy), override (voris) |
new (voris) |
| Polimorfizm | Ha, voris sinfning amalga oshirilishi chaqiriladi | Yo'q, bog'langan turga qarab chaqiriladi |
| Asosiy turdagi referens bilan chaqirish | Qayta yozilgan voris metod chaqiriladi | Asosiy sinf metod chaqiriladi |
| Asosiy sinf metodiga kirish | base.MethodName() orqali |
base.MethodName() yoki turga o'tkazish orqali |
public class BaseClass
{
public virtual void ShowMessage() // Virtual metodni qayta yozish uchun
{
Console.WriteLine("BaseClass'dan xabar (virtual).");
}
public void DisplayInfo() // Yashirish uchun metod
{
Console.WriteLine("BaseClass'dan ma'lumot.");
}
}
public class DerivedClass : BaseClass
{
public override void ShowMessage() // Virtual metodni qayta yozish
{
Console.WriteLine("DerivedClass'dan xabar (override).");
}
public new void DisplayInfo() // Metodni yashirish
{
Console.WriteLine("DerivedClass'dan ma'lumot (new).");
}
}
public class Program
{
public static void Main(string[] args)
{
BaseClass baseObj = new BaseClass();
DerivedClass derivedObj = new DerivedClass();
BaseClass derivedAsBase = new DerivedClass(); // Asosiy turdagi referens voris ob'ektiga
baseObj.ShowMessage(); // Chiqish: BaseClass'dan xabar (virtual).
baseObj.DisplayInfo(); // Chiqish: BaseClass'dan ma'lumot.
derivedObj.ShowMessage(); // Chiqish: DerivedClass'dan xabar (override).
derivedObj.DisplayInfo(); // Chiqish: DerivedClass'dan ma'lumot (new).
derivedAsBase.ShowMessage(); // Chiqish: DerivedClass'dan xabar (override). (Polimorfizm faoliyatda)
derivedAsBase.DisplayInfo(); // Chiqish: BaseClass'dan ma'lumot. (Referens turiga asoslangan metod chaqiriladi)
}
}