2010-02-08 11 views
6

में जेनेरिक, अब सी # प्रोग्रामर के रूप में, मुझे पता है कि जेनेरिक भयानक हैं। हालांकि, जब कुछ VB.NET में दिलचस्पी लेने, मुझे पता चला कि निम्नलिखित एक संकलक त्रुटि का कारण नहीं है:वीबीएनईटी

Dim instance As List(Of Integer) 
instance.Add(True) 

ऐसा क्यों है? मुझे पता है कि आपको वीबीएनईटी में डालने की आवश्यकता नहीं है, लेकिन मैंने सोचा होगा कि यह जेनेरिक - टाइप सुरक्षा का उपयोग करने का मुख्य कारण है।

संपादित करें: मेरे पास विकल्प सख्त नहीं है, क्योंकि यह वास्तविक प्रोग्रामिंग अभ्यास नहीं था, बस मुझे सिद्धांत में वीबी.नेट पर नजर डालें। यह एक सैद्धांतिक सवाल है, क्योंकि मैं उम्मीद कर रहा था कि यह सामान्य प्रकार की सुविधा के रूप में, सख्त विकल्प के साथ भी संकलक त्रुटि का कारण बनता है।

उत्तर

10

Option Strict On के बिना, वीबी.नेट Boolean से Integer पर निहित रूप से परिवर्तित करने में प्रसन्न है। मैं दृढ़ता से अनुशंसा करता हूं (विशेष रूप से सी # पृष्ठभूमि से आ रहा है) कि आप अपने वीबी.नेट काम के लिए Option Strict On डिफ़ॉल्ट बनाते हैं।

आप विजुअल स्टूडियो में Tools में ऐसा कर सकते हैं। Options | Projects and Solutions | VB Defaults

वीबी (क्लासिक) 'आराम' दृष्टिकोण को बदलने के लिए संपादित करें, Google 'एविल टाइप कर्केशन' टाइप करें। हम में से जो वीबी (क्लासिक) में अच्छा काम करने की मांग कर रहे थे, उन्हें इस राक्षस को कुश्ती करना पड़ा ...

+1

+1 यहाँ वीबी में बुराई प्रकार बलात्कार का मूल और सबसे अच्छा आलोचना है, 1995 में लिखा भंडारण है जब यह शुरू की गई थी, और आज भी प्रासंगिक है। http://vb.mvps.org/articles/pt199511.pdf – MarkJ

0

वीबीएनईटी फ़ंक्शन कॉल साइट पर परिवर्तित हो गया। (पूर्णांक की) सूची अभी भी एक पूर्णांक (-1, जो सच है के पूर्णांक मान है)

+0

वाला कोई भी व्यक्ति _negative_ संख्यात्मक मूल्य के साथ एक _positive_ सच मूल्य का प्रतिनिधित्व करने के लिए अपने सिर की जांच होनी चाहिए विचार के साथ आया था। – Rik

+0

@Rik ... -1 सभी बिट्स उच्च है। झूठा 0 है क्योंकि सभी बिट्स बंद हैं। –

+0

@ मैथ्यू व्हिटेड: स्वीकार्य रूप से, यह कुछ समझ में आता है। फिर भी, मुझे 0/1 सम्मेलन बहुत बेहतर लगता है। – Rik