मैं निम्नलिखित वर्गों आ रही हैं:"ओवरराइड" सी # में बनाम 'नई' के बारे में उलझन में
class Base
{
public virtual void Print()
{
Console.WriteLine("Base");
}
}
class Der1 : Base
{
public new virtual void Print()
{
Console.WriteLine("Der1");
}
}
class Der2 : Der1
{
public override void Print()
{
Console.WriteLine("Der2");
}
}
यह मेरा मुख्य विधि है:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
उत्पादन, Base
है Der2
, Der2
।
जहां तक मुझे पता है, ओवरराइड पिछली विधि को चलाने की अनुमति नहीं देगा, भले ही पॉइंटर उन्हें इंगित कर रहा हो। तो पहली पंक्ति Der2
आउटपुट भी होनी चाहिए। हालांकि Base
बाहर आया।
यह कैसे संभव है? ओवरराइड कैसे काम नहीं करता था?
सच एक अद्भुत उदाहरण ... केवल चाल यहाँ है: - शुरू में, आधार के की विधि, "डेर -1" की आभासी विधि से छिपा हुआ था तो "की ओवर-द सवारी विधि डेर -2 "लागू नहीं किया जा सका। इस प्रकार, हमें आधार का मूल्य मिला। – Kings