2015-09-01 7 views
11

I recently सीखा कि GetAwaiter विधि awaiter लौटने वाली विधि await -ed हो सकती है। यह सच है भले ही यह एक विस्तार विधि है, जिसका अर्थ है मूल रूप से किसी भी ऑब्जेक्ट को await -able बनाया जा सकता है, यदि आप चुनते हैं।क्या यह बताना संभव है कि कोई ऑब्जेक्ट रनटाइम पर प्रतीक्षा योग्य है या नहीं?

लेकिन अगर कोई ऑब्जेक्ट await -able है तो रनटाइम पर बताने का कोई तरीका है? सामान्य प्रतिबिंब काम नहीं करेगा, क्योंकि यह किसी ऑब्जेक्ट के विस्तार विधियों की सूची नहीं देता है।

इस प्रश्न पूछते समय मुझे कोई विशेष आवश्यकता नहीं है, अगर यह संभव हो तो मैं उत्सुक हूं।

+1

नहीं, क्योंकि दोनों विधियां कंपाइलर द्वारा किए गए बतख-टाइपिंग का उपयोग करती हैं। यहां तक ​​कि यदि आप कर सकते हैं, तो आप उस जानकारी के साथ क्या करेंगे? –

+0

क्या कोई सीधा कारण है कि आप प्रतिबिंब के साथ विस्तार विधियों की तलाश नहीं कर सकते हैं? मैं देख सकता हूं कि वे आसानी से क्यों उपलब्ध नहीं हैं, लेकिन मुझे कोई कारण नहीं दिख रहा है जिसे आप खोज नहीं सकते हैं। – 31eee384

+1

@ 31eee384 उपलब्ध एक्सटेंशन का सेट स्रोत कोड में या उस समय लोड होने वाली असेंबली के सेट पर निर्भर कथन पर निर्भर करता है। – usr

उत्तर

7

यह संभव नहीं है क्योंकि सी # कंपाइलर उस निर्णय को करने के लिए उपयोग की जाने वाली जानकारी समाप्त हो गई है।

विस्तार विधियों को हल करने के लिए हमें आयात किए गए नामस्थानों को जानने की आवश्यकता है। वह जानकारी रनटाइम पर उपलब्ध नहीं है। यह एक सी # केवल अवधारणा है। सीएलआर नहीं जानता कि using क्या है।

मैं किसी भी कारण से नहीं सोच सकता कि आप देखना चाहते हैं कि कोई ऑब्जेक्ट रनटाइम पर संभवतः प्रतीक्षा योग्य है क्योंकि आप उस जानकारी पर कार्य नहीं कर सकते हैं। हो सकता है कि आप यह जांच सकें कि ऑब्जेक्ट Task है या नहीं?

+0

[इस उत्तर] के अनुसार (http://stackoverflow.com/a/299526/238419), रनटाइम पर एक्सटेंशन विधियों को निर्धारित करना संभव है, जो इस तर्क को गलत बना देगा। –

+0

@ ब्लूराजा-डैनीफ्लूघोफ्ट 'आपको उन सभी असेंबली में देखना है जहां एक्सटेंशन विधि परिभाषित की जा सकती है।' यह संभव नहीं है क्योंकि आप नहीं जानते कि संकलन समय पर कौन से असेंबली का संदर्भ दिया गया था लेकिन शायद अप्रयुक्त और त्याग दिया गया। साथ ही, आप उन जगहों को नहीं जानते जो जगह पर थे। साथ ही, उन विधानसभाओं में परिभाषित एक्सटेंशन भी हो सकते हैं जिन्हें कभी भी संदर्भित नहीं किया गया था लेकिन यह अस्तित्व में है। – usr

संबंधित मुद्दे

 संबंधित मुद्दे