2008-09-17 11 views
13

मैंने कभी भी अपने काम में .NET जेनेरिक का उपयोग नहीं किया है, लेकिन मैं समझता हूं कि वे काफी लोकप्रिय हैं। क्या किसी के पास सीखने के लिए कोई अच्छा लिंक या पुस्तक सुझाव है? बोनस के रूप में; मैं केवल समझता हूं कि .NET जेनेरिक संग्रह क्या हैं और वे क्या करते हैं ... क्या किसी के पास कोई व्यावहारिक उदाहरण है कि .NET में सामान्य संग्रह की तुलना में उन्हें अधिक लाभ के लिए कैसे उपयोग किया जा सकता है?.NET जेनेरिक सीखने के लिए सर्वश्रेष्ठ संसाधन?

उत्तर

10

स्वाभाविक पसंद .. सी # जेफरी रिक्टर द्वारा के माध्यम से

MSDN C# Generics

5

CLR जेनरिक के बारे में गहराई में चला जाता है, और अमूल्य संसाधन हर नेट डेवलपर के मालिक हैं और पढ़ना चाहिए में से एक है।

1

यदि आपने कभी भी C++ टेम्पलेट्स का उपयोग किया है, तो .NET जेनेरिक लगभग एक ही चीज़ हैं। वे एक समान < टी> वाक्यविन्यास का भी उपयोग करते हैं।

भले ही आपको कोई सी ++ पता न हो, भले ही आप संभवतः संग्रह के संबंध में इसे कठिन बनाने की आवश्यकता हो। वे किसी भी अन्य संग्रह की तरह हैं, लेकिन जब आप उन्हें बनाते हैं तो आप < <> के अंदर एक प्रकार का नाम प्रदान करते हैं, इसलिए संकलक जानता है कि वे किस प्रकार की वस्तु रखते हैं।

0

सी # 3.0 संक्षेप में एक शानदार संदर्भ पुस्तक है जिसमें उदाहरणों के साथ ही अवधारणा को समझने के बिना अवधारणा को समझने के लिए बहुत बड़ा विचार है।

-4

मेरा वोट ज्यादातर है- आप सिर्फ उन्हें बचने कर सकते हैं :)

मुख्य लाभ यह जेनरिक के लिए, कास्टिंग को बचाने के लिए है, तो आप अंत आंतरिक रूप से कास्टिंग है कि किसी भी मतलब नहीं है कर रही है। यदि आप इस मुद्दे को देखने का प्रयास करते हैं तो आप पाएंगे कि ज्यादातर जेनेरिक के लिए उम्मीदवार वास्तव में उन संग्रह/सेट हैं जो इस तरह के लाभ के लिए आंतरिक रूप से मूल भंडारण बना सकते हैं। दूसरी ओर, अधिकांश अन्य घटकों को कम/कोई प्रदर्शन नहीं मिलता है, और एक इंटरफ़ेस विरासत कार्यान्वयन की तुलना में लचीलापन में काफी कमी आती है।

कास्टिंग बहुत बहुत है, शायद समय गुस्सा दिलाती है, तो आप IronPython की तरह गतिशील भाषाओं पर विचार करने के लिए :)

and- यदि आप वास्तव में एक परिदृश्य के पार चलो आप सामान्य मेकअप भावना है, यह एक और सवाल के रूप में बाहर पोस्ट लगता है, यहां दिमाग एक साथ देख सकते हैं और मामले के मामले को हल कर सकते हैं :)

अद्यतन: हाँ कंपाइलर जांच अच्छी है, लेकिन कैसल प्रोजेक्ट के स्रोत की जांच करें, आप कई स्थितियों को देख सकते हैं जहां एक सामान्य प्रकार रास्ते में आता है क्योंकि आप नहीं कर सकते कास्टिंग- आईबी बिजनेस ऑब्जेक्ट जैसी चीज़ें बनाना व्यवसाय ऑब्जेक्ट की तुलना में बहुत अधिक लचीला है- क्योंकि आप बिजनेसऑब्जेक्ट से बिजनेसऑब्जेक्ट से कुछ हासिल नहीं कर सकते हैं और एक functio तक पहुंचने की अपेक्षा करते हैं एन विरासत में मिला। आम तौर पर मैंने बिजनेसऑब्जेक्टबेस के रूप में कोड को समाप्त किया -> BusinessObject -> आपकी वास्तविक कक्षा। यही कारण है कि मुझे लगता है कि यह जेनेरिकों का उपयोग करने के लिए हमेशा फायदेमंद नहीं है- और मैं उन लोगों में से एक था जिन्होंने इस तरह के कार्यान्वयन का दुरुपयोग किया और जेनेरिक टाइपिंग के साथ बहुत मजेदार काम किया, बिल्कुल अच्छा नहीं।

अद्यतन # 2: बॉक्सिंग/अनबॉक्सिंग का मतलब ऑब्जेक्ट को कास्ट करने की आवश्यकता है जब आप मूल्य को संग्रहीत करने के लिए एक सार प्रकार (जैसे ऑब्जेक्ट) का उपयोग करते हैं और इसे फिर से स्टोर करने के लिए एक मजबूत टाइप किए गए मान का उपयोग करते हैं (जिसे कास्टिंग की आवश्यकता होती है) नहीं, मैंने जो संग्रह स्थिति बताई है उससे अलग अंतर देख सकता हूं। और इस तरह का कोड अभी भी मुक्केबाजी करता है:

public T GetValue<T>() { 
    return (T) ...; 
} 

जेनेरिक दुर्व्यवहार मैंने अक्सर देखा है। लोग सोचते हैं कि वे यहां देशी प्रकार से निपट रहे हैं, वास्तव में वे नहीं हैं। इसके बजाय वे सिर्फ जेनेरिक वाक्यविन्यास में कास्टिंग करते हैं।वास्तव में क्या समझ में आता है यह है:

public class MyList<T> 
{ 
    private List<T> _list; 
... 
public T GetValue(int index) 
{ 
    return _list[index]; 
} 

फिर यह हमारे संग्रह संग्रहण पर वापस आ गया। संग्रह भंडारण के बाद मैंने क्यों कहा था कि मुझे जेनेरिक मदद करने में बहुत मौका नहीं दिखता है। इस ट्यूटोरियल से भेजा: http://en.csharp-online.net/Understanding_Generics—Revisiting_Boxing_and_Unboxing

+1

तुम बस संग्रह तुलना में बहुत अधिक कर सकते हैं। और आपने 'मुक्केबाजी' के बारे में नहीं सुना होगा। सिर्फ प्रदर्शन से कास्टिंग से परहेज करने से लाभ प्राप्त करने के लिए और भी कुछ है। कंपाइलर लागू प्रकार की सुरक्षा वास्तव में अच्छा है। –

0

मैं Wrox प्रोफेशनल .NET 2.0 जेनेरिक्स बहुत, जैसे वह वास्तव उदाहरण के बहुत सारे शामिल उपयोगी पाया। जेनेरिक शुरुआत करने वालों के लिए भ्रमित हो सकता है लेकिन वे एक अनुभवी डेवलपर के हाथों में एक बहुत उपयोगी/शक्तिशाली/समय बचाने उपकरण हो सकता है। निजी तौर पर, मुझे .NET जेनेरिक संग्रहों को परिभाषित करने और उपयोग को सरल बनाने में सबसे उपयोगी लगता है। इसके अलावा जेनरिक के उपयोग से अधिक कुशल कोड हो सकता है क्योंकि यह आमतौर पर मुक्केबाजी/अनबॉक्सिंग प्रकार रूपांतरणों से जुड़े प्रदर्शन हिट को कम कर सकता है।

0

इस विषय पर कुछ माइक्रोसॉफ्ट प्रशिक्षण का पालन करना सबसे अच्छा है। आप देख रहे हैं पुस्तकों के लिए, निम्नलिखित आदर्श होगा:

http://www.microsoft.com/MSPress/books/9469.aspx

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