मेरे पास आधार वर्ग A
क्यों अतिभारित विधियाँ उदाहरण विधि की तुलना में कम प्राथमिकता दी जाती है
public class A
{
public virtual void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public virtual void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
Inhereted B
public class B : A
{
public virtual void Method(object parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public override void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public override void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
विस्तार विधि के साथ स्टेटिक वर्ग S
public static class S
{
public static void Method(this B instance, B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
उदाहरण हम उदाहरण बनानेटाइप करेंऔर Method
पर हमला करते हैं, हम उम्मीद करते हैं कि यह public override void Method(B parameter)
वास्तविक परिणाम public virtual void Method(object parameter)
होगा।
var b = new B();
b.Method(new B()); // B.Method (Object parameter) Why???
क्यों संकलक अधिक उपयुक्त विधि का चयन नहीं करता ??? UPD और यह विस्तार विधि क्यों नहीं है?
'बी' नेस्टेड नहीं है लेकिन विरासत में मिला है। –
@ हेनक होल्टरमैन धन्यवाद – user854301
यदि ऑब्जेक्ट में समान नाम से विधि है तो एक्सटेंशन विधि को कॉल नहीं किया जाता है। यह पुराना कोड तोड़ने से बचने के लिए है जहां पुरानी विधि को कॉल करना है, न कि नया एक्सटेंशन एक। – Ankush