C # में, मैंने इन सभी जादू के तरीकों को पॉप अप करते हुए देखना शुरू कर दिया, बिना किसी इंटरफ़ेस के बैकअप के। इसे क्यों चुना गया?
मुझे समझाने दो।
पहले C # में, यदि कोई ऑब्जेक्ट IEnumerableइंटरफ़ेस को लागू करता है, तो यह स्वचालित रूप से एक foreachलूप द्वारा चलने योग्य होगा । यह मेरे लिए समझ में आता है, क्योंकि यह एक इंटरफ़ेस द्वारा समर्थित है, और अगर मुझे Iteratorकक्षा के अंदर अपना कार्य करना होता है, तो मैं यह चिंता किए बिना कर सकता हूं कि यह जादुई रूप से कुछ और होगा।
अब, स्पष्ट रूप से, (निश्चित नहीं है कि कब), इन इंटरफेस की अब आवश्यकता नहीं है। इसके लिए बस सही नामकरण रूपांतरण होना चाहिए।
एक अन्य उदाहरण किसी भी वस्तु को उचित नाम दे कर प्रतीक्षा योग्य बना रहा है GetAwaiter जिसमें कुछ विशिष्ट गुण हैं।
क्यों एक अंतरफलक नहीं की तरह वे के साथ किया था IEnumerableया INotifyPropertyChangedस्थिर इस "जादू" बैकअप लेने के लिए?
मैं यहाँ क्या मतलब पर अधिक जानकारी:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
मैजिक मेथड्स के पेशेवरों और विपक्ष क्या हैं, और क्या कहीं भी ऑनलाइन है जहां मुझे कुछ भी पता चल सकता है कि ये फैसले क्यों किए गए थे?
async/ के लिए एक इंटरफ़ेस की आवश्यकता है, / await, तो वह केवल उस कोड के साथ काम करेगा, जो .NET 4.5 के बाद लिखा गया था, जो एक व्यवहार्य लक्ष्य होने के लिए पर्याप्त विस्तृत हो गया ... जो मूल रूप से अब है। लेकिन विधि कॉल में एक विशुद्ध रूप से वाक्यविन्यास अनुवाद मुझे awaitतथ्य के बाद मौजूदा प्रकारों में कार्यक्षमता जोड़ने की अनुमति देता है।
foreachशुरुआत में एक पाश के लिए आधार कार्यक्षमता के रूप में लागू किया गया था । वहाँ कभी नहीं वस्तु को लागू करने के लिए एक आवश्यकता किया गया है IEnumerableके लिए foreachकाम करने के लिए। यह सिर्फ ऐसा करने के लिए सम्मेलन है।