सी # में, किसी भी विधि जिसे आप बेसक्लेज़ से ओवरराइड करना चाहते हैं, abstract
, virtual
या override
स्वयं होना चाहिए। नया कीवर्ड वास्तव में ओवरराइड नहीं करता है। यह विभिन्न प्रकार के काम करता है:
यदि आप नए-कीवर्ड के साथ एक फ़ंक्शन घोषित करते हैं, तो बेस-क्लास के फ़ंक्शन को छुपाते हैं, तो यह कार्यान्वयन केवल तभी उपयोग किया जाएगा जब आपके पास एक ही बच्चे के प्रकार का ऑब्जेक्ट हो। उदाहरण:
class TopClass
{
public String getHello()
{
return "Hello";
}
public virtual String getWorld()
{
return "World";
}
}
class ChildClass : TopClass
{
public new String getHello()
{
return "Hi";
}
public override string getWorld()
{
return "Earth";
}
}
यह परिणाम होगा में: अधिभावी विस्तार वर्ग एक माता-पिता ClassType लिए casted है, तो:
TopClass tc = new TopClass();
Console.WriteLine(tc.getHello() + " " + tc.getWorld()); // Hello World
ChildClass cc = new ChildClass();
Console.WriteLine(cc.getHello() + " " + cc.getWorld()); // Hi Earth
TopClass tc2 = new ChildClass();
Console.WriteLine(tc2.getHello() + " " + tc2.getWorld()); // Hello Earth
Console.ReadLine();
आप एक विशिष्ट ओवरराइड की तुलना में नए कीवर्ड का अंतर देख सकते हैं फ़ंक्शंस (दुनिया के बदले पृथ्वी लौटते हैं) अभी भी प्रभावी होंगे, जबकि नए फ़ंक्शन नहीं हैं (हैलो के बजाए हाय वापस नहीं किया गया है)।
संक्षिप्त उत्तर: नहीं –
शायद 'नया' का उपयोग सी # से टालना है। शायद यह फिर से डिजाइन करना बेहतर होगा? – horgh