2015-08-24 6 views
7

this question से Visual Studio 2015 में विभिन्न विजुअल बेसिक संस्करणों का उपयोग करने पर पैरामीटर के निर्माणकर्ता here और here दस्तावेज के रूप में, मैं Visual Basic 14 में नई लंगेज सुविधाओं के माध्यम से चल रहा हूं।संरचना

उन में से एक ढांचे में parameterless कंस्ट्रक्टर्स करने की क्षमता, इस तरह है: जब मैं दृश्य   में कोड स्टूडियो   2015 में यह कोशिश

Structure MyStruct1 
    Public f As Integer 
    Sub New() 
     f = 15 
    End Sub 
End Structure 

, मैं अभी भी एक लाल त्रुटि विद्रूप के तहत हो रही है New():

BC30629 संरचनाएं बिना किसी पैरामीटर के एक गैर-साझा 'सब न्यू' घोषित नहीं कर सकती हैं।

मैंने कहीं भी नहीं देखा है जो कहता है कि इसे रिलीज से पहले खींच लिया गया है।

क्या मैं यह समझता हूं कि यह नई सुविधा क्या है?

+0

मैं एक जवाब नहीं है लेकिन मैं पुष्टि कर सकता है कि यह वी.एस. 2015 (समुदाय) में काम नहीं करता है, क्या ढांचे पर स्वतंत्र लक्षित है। (इसलिए यह विशिष्ट स्थापना से संबंधित नहीं है)। मैं भी कुख्यात हूँ। – Jens

+0

क्या आपने कन्स्ट्रक्टर को सार्वजनिक करने की कोशिश की है?मुझे लगता है कि एक आवश्यकता हो सकती है। –

+0

@ChrisDunaway: कोई फर्क नहीं पड़ता। एफडब्ल्यूआईडब्ल्यू, ऊपर दिया गया उदाहरण बिल्कुल वैसा ही है जैसा यह लिंक किए गए दस्तावेज़ पृष्ठों में से एक पर है। –

उत्तर

5

आप नीचे उद्धृत पाठ में देख सकते हैं, Roslyn parameterless कंस्ट्रक्टर्स साथ संरचनाओं के लिए समर्थन हटा, और इसलिए यह नहीं एक new feature in VB 14 के रूप में सूचीबद्ध है।

यह एक लंबी स्थायी आवश्यकता है कि सी # और वीबी संरचना रचनाकारों के पास हमेशा पैरामीटर होंगे। कक्षाओं के साथ अधिक सुसंगत बनाने के लिए हमने सी # 6.0 में आवश्यकताओं को आराम करने का प्रयास किया है।

जबकि structs में कुल पैरामीटर रहित कन्स्ट्रक्टर आईएल परिप्रेक्ष्य से मान्य हैं, उन्हें घोषित करने के सुविधाजनक तरीके के बिना वे वर्चुअल रूप से nonexistent थे। जैसे-जैसे हमने अधिक से अधिक परीक्षण किए, हमने को ऐसे मामलों की खोज की जहां पैरामीटर रहित संरचना रचनाकारों ने पुस्तकालयों में या सीएलआर के कुछ संस्करणों में असंगत व्यवहार का कारण बना दिया।

कोडप्लेक्स बग http://roslyn.codeplex.com/workitem/465 में एक अच्छा उदाहरण बताया गया है। यह समस्या मूल रूप से एक्टिवेटर में पेश की गई ऑप्टिमाइज़ेशन है। सीएलआर 4.0 और के आसपास क्रिएटइंस्टेंस तब से मौजूद है। ऑप्टिमाइज़ेशन मानता है कि सामान्य टी प्रकार के पैरामीटर रहित तत्कालता का दुष्प्रभाव नहीं होता है यदि टी संरचना है और इसलिए उदाहरण कैश किए जा सकते हैं। पैरामीटर रहित संरचना कन्स्ट्रक्टर ऐसी धारणाओं का उल्लंघन करेंगे और ऑप्टिमाइज़ेशन को देखने योग्य बनाते हैं, इस प्रकार मौजूदा कोड कई संस्करणों की सर्विसिंग की आवश्यकता है।

लंबे खड़े मान्यताओं को तोड़ने से उत्पन्न होने वाले संभावित मुद्दों पर पुनर्विचार के बाद, हम फैसला किया कि यह हमेशा औपचारिक मापदंडों के लिए struct कंस्ट्रक्टर्स पर आवश्यकता बहाल करने के लिए अपने उपयोगकर्ताओं के लिए सबसे अच्छा था।


स्रोत: Restore requirement for struct constructors to always have formal parameters. #1029

+1

यह एक शर्म की बात है कि उस विशेष Roslyn विकी पृष्ठ खोज परिणामों में दिखाई नहीं देता है (उदाहरण के लिए वीबी 14 या वीबी 2015 के लिए) - वह ब्लॉग पोस्ट है जो पुरानी सूची के माध्यम से लिंक करता है। –

+0

यह केवल सी # (6.0) का उल्लेख करता है। क्या वीबी.नेट भी बदल गया था? या यह केवल सी # में कोशिश की गई थी? –