2012-07-16 16 views
22

मुझे एहसास हुआ कि माइक्रोसॉफ्ट .NET Framework में void रिटर्न प्रकार एक संरचना है। क्यूं कर?शून्य संरचना क्यों है?

... 
public void TestMethod() 
{ 

} 
... 
+2

मुझे लगता है कि ओप [void] (http://msdn.microsoft.com/en-us/library/yah0tteb (v = vs.80) .aspx) को भ्रमित कर रहा है) कीवर्ड और [System.Void] (http://msdn.microsoft.com/en-us/library/system.void.aspx) प्रतिबिंब में प्रयुक्त संरचना। – Strelok

+6

वास्तव में, यहां मुख्य बिंदु: एक 'शून्य' विधि ** ** (आईएल शर्तों में) कुछ भी वापस नहीं करता है। यदि आपने आईएल लिखा है जिसने इस तरह की विधि से लौटाए गए मूल्य को पढ़ने या "पॉप" करने का प्रयास किया है, तो सीएलआई (और पीवीवीरिफ़) आपको बताएगा कि आपने स्टैक को खारिज कर दिया है। –

+0

आरएक्स डिजाइनर भी ['यूनिट'] (http://msdn.microsoft.com/en-us/library/system.reactive.unit (v = vs.103) के लिए एक स्ट्रक्चर के साथ गए थे, जो कुछ भी है लायक। शायद 'शून्य' के साथ लाइन में रहने के लिए। – ligos

उत्तर

28

ढांचे a value type called System.Void का उपयोग करता प्रतिबिंब साथ प्रयोग के लिए void वापसी प्रकार कीवर्ड प्रतिनिधित्व करने के लिए। हालांकि void का मतलब है कि रिटर्न वैल्यू की कमी, यह अभी भी तकनीकी रूप से एक प्रकार है, और इसे कोड में व्यक्त करने के लिए इसे एक संरचना (मूल्य प्रकार) या कक्षा (संदर्भ प्रकार) होना चाहिए।

उदाहरण के लिए MethodInfo.ReturnType देखें।

क्यों ढांचे के डिजाइनरों ने System.Void को एक संरचना बनाने का विकल्प चुना है, न कि वर्ग किसी का अनुमान है, लेकिन इसे पहले स्थान पर किसी प्रकार से दर्शाया जाना चाहिए। मैं टिप्पणियों से सहमत हूं कि यह अन्य अनुकूलन के बीच आम तौर पर संदर्भ लुकअप से जुड़े अनावश्यक ओवरहेड से बचने के लिए है।

+17

मेरा "सबसे अच्छा अनुमान" यह है कि वे चाहते थे कि कोड को निरीक्षण करने के लिए, जितना संभव हो सके 0 बाइट्स लौटाए। फ़ील्ड के बिना एक संरचना 0 बाइट्स है, जहां-क्लास संदर्भ 4 या 8 है। हालांकि महत्वपूर्ण रूप से, आईएल स्तर पर यह स्पष्ट रूप से कुछ भी वापस नहीं करता है, और उन 0 बाइट्स को "पॉप" करने का प्रयास करने से आईएल सत्यापन विफल हो जाएगा। –

+0

अतिरिक्त पठन: http://ahuwanya.net/blog/post/Exploring- सिस्टमप्रोइड- पार्ट-I.aspx http://ahuwanya.net/blog/post/Exploring- सिस्टमप्रोइड- पार्ट-II.aspx – Strelok

+0

दिलचस्प , मुझे संदर्भ स्रोत में कहीं भी 'संरचना शून्य' की वास्तविक घोषणा नहीं मिल रही है। आम तौर पर वे स्रोत टिप्पणियों में इस तरह के चीजों के लिए थोड़ा सा स्पष्टीकरण देते हैं। –

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