डिफ़ॉल्ट इंटरफ़ेस विधियों का व्यवहार 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
? और संभवतः एक विरासत हीरे को पेश करते हुए