मैं वैकल्पिक पैरामीटर के साथ खेल रहा था यह देखने के लिए कि वे इंटरफेस के साथ कैसे काम करेंगे और मैं एक अजीब चेतावनी में आया।वैकल्पिक पैरामीटर्स के साथ एक इंटरफ़ेस को स्पष्ट रूप से कार्यान्वित करने से चेतावनी
public interface ITestInterface
{
void TestOptional(int a = 5, int b = 10, object c = null);
}
public class TestClass : ITestInterface
{
void ITestInterface.TestOptional(int a = 5, int b = 5, object c = null)
{
Console.Write("a=" + a + " b=" + b + " c=" + c);
}
}
संकलक मेरा पीछा चेतावनी देता है:: सेटअप मैं था निम्नलिखित कोड था
- पैरामीटर के लिए निर्दिष्ट 'एक' कोई असर नहीं होगा, क्योंकि यह एक सदस्य पर लागू होता है कि डिफ़ॉल्ट मान उन संदर्भों में प्रयोग किया जाता है जो वैकल्पिक तर्कों की अनुमति नहीं देते हैं
- पैरामीटर 'बी' के लिए निर्दिष्ट डिफ़ॉल्ट मान का कोई प्रभाव नहीं पड़ेगा क्योंकि यह ऐसे सदस्यों पर लागू होता है जो वैकल्पिक तर्कों की अनुमति नहीं देते हैं
- डिफ़ॉल्ट मान निर्दिष्ट च
class Program { static void Main(string[] args) { ITestInterface test = new TestClass(); test.TestOptional(); Console.ReadLine(); } }
मैं मिलता है: या पैरामीटर 'सी' कोई प्रभाव नहीं है क्योंकि यह एक सदस्य है कि संदर्भों में प्रयोग किया जाता है कि वैकल्पिक तर्क
अगर मैं निम्नलिखित कोड के साथ इस चलाने की अनुमति नहीं है पर लागू होता है होगा जैसा कि मैं उम्मीद करता हूं "" का आउटपुट।
मेरा प्रश्न यह है कि क्या चेतावनी है? इसका क्या संदर्भ है?
@ ग्रेगसी हाँ, स्पष्ट कार्यान्वयन के मामले में उनका कोई प्रभाव नहीं पड़ता है। एक अंतर्निहित कार्यान्वयन के मामले में महत्वपूर्ण बात यह है कि इंटरफेस और कक्षाओं में समान मूल्यों को बनाए रखना है। अन्यथा आप कुछ बहुत ही कठिन-से-खोज कीड़े के साथ समाप्त कर सकते हैं। –
वे सी ++ में भी खोजना बहुत कठिन थे, इसलिए सी # टीम ने हाल ही में डिफ़ॉल्ट पैरामीटर मानों के साथ प्रतीक्षा करने का विकल्प चुना। मुझे लगता है कि मैंने इसे एरिक एल के ब्लॉग पर देखा, मुझे लगता है। – GregC