व्युत्पन्न वर्ग में "गणना" विधि होती है जो "व्युत्पन्न" वर्ग पर कुछ क्रियाएं करती है। दूसरी ओर मेरे पास एक एक्सटेंशन विधि है जो वर्ग "व्युत्पन्न" को भी लक्षित करती है।एक्सटेंशन विधि अलग क्यों व्यवहार करती है?
Derived derived = new Derived();
derived.Count();
उपरोक्त स्निपेट को कॉल करके व्युत्पन्न कक्षा के अंदर "गणना" विधि निष्पादित की जाएगी। क्यों सी # कंपाइलर चेतावनी नहीं देता है और इस स्थिति में विस्तार विधि की पहचान करता है। आंतरिक रूप से इसे कैसे ढांचा बनाते हैं?
//Base class
public class Base
{
public virtual string Count()
{
return string.Empty;
}
}
//Derived class
public class Derived : Base
{
public override string Count()
{
return base.Count();
}
}
//Extension Methods for Derived class
public static class ExtensionMethods
{
public static Derived Count(this Derived value)
{
return new Derived();
}
}
आप क्यों भी विवरण जोड़ना चाहते हैं। उदाहरण मैं सोच सकता हूं: अस्पष्टता को कम करना, और इसलिए आप कोर क्लास कार्यक्षमता को बदलना नहीं चाहते हैं (यानी, उस समय के दायरे में निर्दिष्ट या निर्दिष्ट समय के आधार पर आपके एक्सटेंशन 'गणना' या आवृत्ति की 'गणना' को कॉल करके) – Xcelled194
यदि आप वास्तव में सामान्य की बजाय एक्सटेंशन विधि को कॉल करना चाहते हैं, आप सिंटैक्टिक चीनी का उपयोग नहीं कर सकते हैं, और सामान्य स्थैतिक विधि कॉल का उपयोग करना चाहिए: 'व्युत्पन्न व्युत्पन्न = नया व्युत्पन्न(); ExtensionMethods.Count (व्युत्पन्न); ' – Alejandro