पर कॉल करने के लिए कैसे करें मेरे पास एक वर्ग है जो कुछ टूल द्वारा उत्पन्न होता है, इसलिए मैं इसे बदल नहीं सकता। उत्पन्न वर्ग बहुत ही सरल (कोई इंटरफ़ेस, कोई आभासी विधि) है:कॉल को सी # व्युत्पन्न विधि
class GeneratedFoo
{
public void Write(string p) { /* do something */ }
}
सी # परियोजना में, हम इतना है कि हम MyFoo का एक अलग कार्यान्वयन में प्लग कर सकते हैं एक तरीका प्रदान करना चाहते हैं। इसलिए मैं GeneratedFoo
class MyFoo : GeneratedFoo
{
public new void Write(string p) { /* do different things */ }
}
से ली गई तो मैं एक CreateFoo विधि है कि या तो GeneratedFoo या MyFoo वर्ग का एक उदाहरण वापस आ जाएगी है MyFoo बनाने के लिए सोच रहा हूँ। हालांकि यह हमेशा जेनरेटेड फू में विधि को कॉल करता है।
GeneratedFoo foo = CreateFoo(); // if this returns MyFoo,
foo.Write("1"); // it stills calls GeneratedFoo.Write
यह निष्कासित है क्योंकि यह वर्चुअल विधि नहीं है। लेकिन मैं सोच रहा हूं कि व्युत्पन्न विधि कहने के लिए कोई तरीका है (एक हैक हो सकता है)।
धन्यवाद,
इयान
"सार्वजनिक नया शून्य"? "नया" का उपयोग करता है जो मैंने पहले कभी नहीं देखा है। क्या यह भी वैध है? – abelenky
'नया' यहां इंगित करता है कि आपने बेस क्लास से स्पष्ट रूप से 'कवर' विधि है, इसे ओवरराइड किए बिना (क्योंकि यह वर्चुअल नहीं है) - इसके बिना आपको वास्तव में कंपाइलर से चेतावनी मिल जाएगी। –
अधिक विशिष्ट होने के लिए - जब आप व्युत्पन्न कक्षा में अपना नाम आधार के समान नाम देते हैं, और यह ओवरराइड विधि नहीं है, तो कंपाइलर्स आपको चेतावनी देता है कि आप अपनी विधि विरासत में सदस्य को छुपाते हैं (क्योंकि आप शायद ऐसा नहीं करना चाहते थे), लेकिन यदि आप इसके बारे में निश्चित हैं, तो आप 'नए' कीवर्ड का उपयोग करके संकलक को बताएं। –