2012-01-03 15 views
7

मैं कुछ MSDN documentations के माध्यम से गया था। मैंने वहां विस्तारित विधियों को भी पाया।क्यों सी # कक्षा पुस्तकालयों में विस्तार विधियां

मैं समझ में नहीं आया, क्यों इन आधार वर्ग पुस्तकालयों विस्तार तरीकों है? जब वे उस विशेष कक्षा पुस्तकालय में खुद को जोड़ा जा सकता था?

क्या फायदा है? अंतर ?

उत्तर

1

एक्सटेंशन तरीके के रूप में नाम का सुझाव कार्यक्षमता या लक्ष्य प्रकार की उपयोगिता फैली हुई है।

  1. इन तरीकों को बाद में प्रकाशित होने के बाद बाद में (संलेखन समय टाइप करने के बाद) जोड़ा जा सकता है।
  2. वे लोगों
  3. एक्सटेंशन तरीकों इंटरफेस लक्षित कर सकते हैं के विभिन्न समूह द्वारा लिखा जा सकता है।
  4. अलग अलग लोगों को उनकी आवश्यकताओं के अनुसार अलग ढंग से एक ही प्रकार का विस्तार कर सकते (वैकल्पिक एक आम आधार प्रकार इन तरीकों होने या उन्हें प्रत्येक प्रकार में फिर से लागू करने के लिए हो गया होता)।

विस्तार तरीकों का सही उपयोग (बजाय प्रकार परिभाषा के भीतर प्रकार की मुख्य कार्यक्षमता का ध्यान केंद्रित) वास्तविक प्रकार परिभाषा/कार्यान्वयन से ओर्थोगोनल अव्यवस्था को दूर कर सकते हैं।

LINQ का उदाहरण लें - IEnumerable पर विस्तार विधियां प्रदान करके, यह पहले से प्रकाशित प्रकारों (और भविष्य में लिखे गए विशाल प्रकार के प्रकार) की विशाल संख्या को लक्षित कर सकता है; इसने ऑर्थोगोनल चिंता को अलग किया है जैसे वास्तविक प्रकार से पूछताछ करना।

+0

मद # 3 उन्हें एकीकृत करने की पूरी तरह से गलत है। यह आपके 'वैकल्पिक' में वर्णित विस्तार विधियों के यांत्रिकी को पूरी तरह गलत तरीके से गलत तरीके से प्रस्तुत करता है। साथ ही, "वास्तविक प्रकार से पूछताछ" से आपका क्या मतलब है? –

+0

@ एआर।, शायद आपको # 3 में * गलत * की व्याख्या करने की आवश्यकता है। # 3 के लिए अच्छा उदाहरण 'IEnumerable ' - यदि इंटरफ़ेस एक्सटेंशन विधियों द्वारा लक्षित नहीं किया जा सकता है तो कुछ-शरीर को उन सभी विधियों के लिए विशिष्ट प्रकार (या उनके सामान्य आधार प्रकार) में कार्यान्वयन लिखना होगा। – VinayC

+0

@ एआर।, आगे, मैंने "ऑर्थोगोनल चिंता" शब्द को वास्तविक प्रकार से पूछताछ के रूप में "वास्तविक प्रकार से पूछताछ" शब्द का उपयोग किया था - इसका मतलब यह है कि विभिन्न संग्रह जैसे शब्दकोश, सूची, कतार, सेट, स्टैक इत्यादि नहीं है विभिन्न पूछताछ विधियों के लिए कार्यान्वयन प्रदान करना होगा (शामिल हों, गिनें, पहले, अंतिम आदि)। यह तर्क वास्तव में उन वर्गों के लिए मुख्य चिंता नहीं है। – VinayC

1

दस्तावेज किए गए विस्तार विधियों को IEnumerable<T> पर परिभाषित किया गया है, जो ObjectSet<T> लागू होते हैं।

वे दस्तावेज हैं ताकि आप जानते हैं कि आप उनका उपयोग कर सकते हैं।

एक्सटेंशन विधियों के रूप में वे किसी भी को इस इंटरफ़ेस को कार्यान्वित करने के प्रकार को विस्तारित करते हैं।

3

ध्यान दें, कि इन तरीकों में से कई इंटरफेस है, जो विस्तार के तरीके का उपयोग करने का एक पूरी तरह से वैध बहाना नहीं है, माइक्रोसॉफ्ट के लिए भी पर चल रही इंटरफेस के बाद से खुद को किसी भी विधि का कार्यान्वयन नहीं हो सकता।

0

मुझे लगता है कि यह सबसे probbably एक "विपणन मुद्दा है।" BCL उपभोक्ता (हमें) विस्तार विधियों का उपयोग करने के लिए सलाह देने का तरीका, जहां हमें उनकी आवश्यकता है।

प्रयोज्य दृष्टिकोण से, वहाँ है किसी भी अच्छाई, imo, अपनी सूची पर में BCL

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