मैं सी # 4 में वैकल्पिक पैरामीटर के साथ कि देखा है अगर आप एक अंतरफलक आप पर एक वैकल्पिक पैरामीटर निर्दिष्ट डॉन, टी किसी भी लागू करने वर्ग पर कि पैरामीटर वैकल्पिक बनाने के लिए है:
public interface MyInterface
{
void TestMethod(bool flag = false);
}
public class MyClass : MyInterface
{
public void TestMethod(bool flag)
{
Console.WriteLine(flag);
}
}
और इसीलिए:
var obj = new MyClass();
obj.TestMethod(); // compiler error
var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
क्या किसी को पता है कि वैकल्पिक मापदंडों को इस तरह से काम करने के लिए क्यों बनाया गया है?
एक तरफ मुझे लगता है कि इंटरफेस पर निर्दिष्ट किसी भी डिफ़ॉल्ट मान को ओवरराइड करने की क्षमता उपयोगी है, हालांकि ईमानदार होना मुझे यकीन नहीं है अगर आपको इंटरफ़ेस पर डिफ़ॉल्ट मानों को निर्दिष्ट करने में सक्षम होना चाहिए क्योंकि यह एक कार्यान्वयन निर्णय होना चाहिए।
दूसरी ओर, इस डिस्कनेक्ट का मतलब है कि आप हमेशा ठोस वर्ग और इंटरफ़ेस का उपयोग नहीं कर सकते। यह निश्चित रूप से एक समस्या नहीं होगी यदि कार्यान्वयन पर डिफ़ॉल्ट मान निर्दिष्ट किया गया है, लेकिन तब यदि आप अपने कंक्रीट वर्ग को इंटरफ़ेस के रूप में उजागर कर रहे हैं (उदाहरण के लिए कंक्रीट वर्ग को इंजेक्ट करने के लिए कुछ आईओसी फ्रेमवर्क का उपयोग कर रहे हैं) तो वास्तव में कोई नहीं है डिफ़ॉल्ट मान होने के कारण कॉल करने वाले को हमेशा इसे वैसे भी प्रदान करना होगा।
MyInterface
वैकल्पिक पैरामीटर के साथ कॉल और कॉल कर सकते हैं ((MyInterface)obj).TestMethod();
:।