मैं थोड़ा उलझन में हूं कि एक्सटेंशन विधियां कैसे काम करती हैं।सी # एक्सटेंशन विधि प्राथमिकता
यदि मैं इसे सही ढंग से http://msdn.microsoft.com/en-us/library/bb383977.aspx और यह If an extension method has the same signature as a method in the sealed class, what is the call precedence? पढ़ रहा हूं।
फिर निम्नलिखित को "इंस्टेंस" लिखना चाहिए, लेकिन इसके बजाय यह "विस्तार विधि" लिखता है।
interface IFoo
{
}
class Foo : IFoo
{
public void Say()
{
Console.WriteLine("Instance");
}
}
static class FooExts
{
public static void Say(this IFoo foo)
{
Console.WriteLine("Extension method");
}
}
class Program
{
static void Main(string[] args)
{
IFoo foo = new Foo();
foo.Say();
}
}
व्यवहार को स्पष्ट करने में किसी भी मदद की सराहना करें।
क्या आप एक विस्तार विधि संकलन के साथ अंतर्निहित विधि को ओवरराइड करना चाहते हैं? – kenny
दूसरी नज़र में या इसे संकलित करने पर, इंटरफ़ेस में Say() नहीं है, इसलिए आपने एक्सटेंशन विधि को क्या कहा है। इंटरफ़ेस में सेव() के साथ संकलक 'सी: \ प्रोजेक्ट \ _play \ एक्सटेंशन मैथ्यूज \ Program.cs (2,1) के साथ शिकायत करता है: त्रुटि CS0116: नामस्थान में फ़ील्ड या विधियों जैसे सदस्यों को सीधे शामिल नहीं किया जा सकता है' – kenny