Sobes.tech
Middle

C#-да ыкмолорду кайра жазуу менен жашыруу арасы кандай айырма бар?

sobes.tech AI

AIден жооп

Преопределение (override) колдонулат полиморфизмди ишке ашыруу үчүн, мураскор класска виртуалдуу, абстракттуу же мурас алган методдун өзүнүн ишке ашырылышын камсыз кылууга мүмкүндүк берет. virtual сөзү негизги класста жана override мурас алууда милдеттүү.

Жашыртуу (hiding, shadowing) ошол эле аталыштагы метод менен мураскор класста негизги класстын методун жашыруу. Негизги класстын методу сакталат, бирок анын үстүнөн жетүү үчүн түздөн-түз түрүн түрлөргө бөлүү же base сөзү колдонулат. new сөзү мураскор класста колдонулат.

Өзгөчөлүк Переопределение (Override) Жашыртуу (Hiding)
Ключ сөз virtual (негизги), override (мурас алгыч) new (мурас алгыч)
Полиморфизм Ооба, мурас алгычтын ишке ашырылышы чакырылат Жок, сылтаманын түрүнө жараша ишке ашырылат
Ссылка аркылуу Мурунку мурас алгычтын ишке ашырылышы Негизги класстын методу чакырылат
Негизги класска жетүү base.MethodName() аркылуу base.MethodName() же түрүн түрлөргө бөлүү аркылуу
public class BaseClass
{
    public virtual void ShowMessage() // Виртуалдуу метод
    {
        Console.WriteLine("Message from BaseClass (virtual).");
    }

    public void DisplayInfo() // Жашыртуу методу
    {
        Console.WriteLine("Info from BaseClass.");
    }
}

public class DerivedClass : BaseClass
{
    public override void ShowMessage() // Виртуалдуу методду переопределдөө
    {
        Console.WriteLine("Message from DerivedClass (override).");
    }

    public new void DisplayInfo() // Методду жашыруу
    {
        Console.WriteLine("Info from DerivedClass (new).");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        BaseClass baseObj = new BaseClass();
        DerivedClass derivedObj = new DerivedClass();
        BaseClass derivedAsBase = new DerivedClass(); // Негизги типке шилтеме

        baseObj.ShowMessage();     // Чыгуу: Message from BaseClass (virtual)
        baseObj.DisplayInfo();     // Чыгуу: Info from BaseClass

        derivedObj.ShowMessage();  // Чыгуу: Message from DerivedClass (override)
        derivedObj.DisplayInfo();  // Чыгуу: Info from DerivedClass (new)

        derivedAsBase.ShowMessage(); // Чыгуу: Message from DerivedClass (override)
        derivedAsBase.DisplayInfo(); // Чыгуу: Info from BaseClass
    }
}