डिफ़ॉल्ट इंटरफ़ेस विधियों का व्यवहार C # 8 में क्यों बदला गया है? पिछले कोड में (जब डिफ़ॉल्ट इंटरफ़ेस विधियों को जारी नहीं किया गया था):
interface IDefaultInterfaceMethod
{
// By default, this method will be virtual, and the virtual keyword can be here used!
virtual void DefaultMethod()
{
Console.WriteLine("I am a default method in the interface!");
}
}
interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod
{
void IDefaultInterfaceMethod.DefaultMethod()
{
Console.WriteLine("I am an overridden default method!");
}
}
class AnyClass : IDefaultInterfaceMethod, IOverrideDefaultInterfaceMethod
{
}
class Program
{
static void Main()
{
IDefaultInterfaceMethod anyClass = new AnyClass();
anyClass.DefaultMethod();
IOverrideDefaultInterfaceMethod anyClassOverridden = new AnyClass();
anyClassOverridden.DefaultMethod();
}
}
निम्नलिखित आउटपुट है:
कंसोल आउटपुट:
मैं इंटरफ़ेस में एक डिफ़ॉल्ट विधि हूँ!
मैं एक ओवरराइड डिफ़ॉल्ट विधि हूँ!
लेकिन C # 8 अंतिम संस्करण के साथ उपरोक्त कोड निम्नलिखित आउटपुट का उत्पादन कर रहा है:
कंसोल आउटपुट:
मैं एक ओवरराइड डिफ़ॉल्ट विधि हूँ!
मैं एक ओवरराइड डिफ़ॉल्ट विधि हूँ!
कोई मुझे समझा सकता है कि यह व्यवहार क्यों बदला है?
ध्यान दें:
IDefaultInterfaceMethod anyClass = new AnyClass(); anyClass.DefaultMethod();
((IDefaultInterfaceMethod) anyClass).DefaultMethod(); // STILL the same problem!??
Cut base() syntax for C# 8. We intend to bring this back in the next major release.। इसे ठीक से काम करने के लिए रनटाइम समर्थन की आवश्यकता होगी।
virtual? और संभवतः एक विरासत हीरे को पेश करते हुए