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։ (BaseClass-ի մեթոդը կանչվում է հղումի տիպի պատճառով)
}
}