साथ मैं विस्तार तरीकों, जो एक ही नाम स्थान और विधानसभा में हैं निम्नलिखित जोड़ी:विधि संकल्प वैकल्पिक पैरामीटर
public static class DateTimeExtensions
{
public static string NullSafeToString(this DateTime? possiblyNullDateTime, string format, string nullString = "")
}
public static class NullableExtensions
{
public static string NullSafeToString<T>(this Nullable<T> nullable, string nullString = "") where T : struct
}
मेरा प्रश्न विधि संकल्प के बारे में है। निम्नलिखित कॉल (एक और नाम स्थान से) ObjectExtensions.NullSafeToString
पर ले कर जब मैं उम्मीद DateTimeExtensions.NullSafeToString
:
DateTime? dateTime;
// ...
dateTime.NullSafeToString("yyyyMMdd");
की उम्मीद के रूप में यह हल करने का कारण बनता है DateTimeExtensions.NullSafeToString
से वैकल्पिक पैरामीटर निकाला जा रहा है।
सी # spec की धारा 7.6.5.2 खोजे गए नामस्थानों के क्रम की रूपरेखा बताती है, लेकिन उपर्युक्त समान नामस्थान में हैं, इसलिए मैं धारा 7.6.5.1 में नियमों का उपयोग करने की अपेक्षा करता हूं।
मैंने सोचा था कि क्योंकि यह DateTimeExtensions.NullSafeToString
से मेल चाहते हैं:
- हालांकि वे दोनों
Nullable<DateTime>
की पहली पैरामीटर प्रकार होगा, मैंने सोचा था कि एक गैर सामान्य विधि (यानी प्रकार पैरामीटर के बिना) पहले विचार किया जाएगा । - मैं हालांकि पैरामीटर सूचियों पहली बार अपने वैकल्पिक पैरामीटर के बिना विचार किया जाएगा
किसी को भी स्पष्ट कर सकते हैं कि ऐसा क्यों DateTimeExtensions.NullSafeToString
से अधिक ObjectExtensions.NullSafeToString
उठा रहा है?
(इसके अलावा: यहां पर अन्य चर्चाओं से, मुझे संदेह है कि कुछ लोग डिफ्रेंसिंग नल-सुरक्षित बनाने के लिए विस्तार विधि अर्थशास्त्र का उपयोग करने से इनकार कर सकते हैं, लेकिन मुझे लगता है कि इस तरह के सीमित परिदृश्यों के लिए उपयोग किया जाता है, वे अधिक पठनीय कोड के लिए भी बनाते हैं। मैं जानता हूँ कि Nullable.ToString
पहले से ही अशक्त-सुरक्षित है क्योंकि Nullable
वस्तु ही अशक्त नहीं है, लेकिन है कि निहित ToString
के मानकों को पूरा नहीं करता है, और मुझे लगता है कि कोई स्पष्ट नाम विधि अशक्त-सुरक्षित आशय इंगित करता है।)
अधिभार संकल्प लागू होता है की कोशिश कर सकते हैं। –