एक प्रकार के रूप में शून्य । पृथ्वी पर "शून्य" एक प्रकार क्यों है? इसका कोई उदाहरण नहीं है, इसका कोई मूल्य नहीं है, आप इसे सामान्य प्रकार के तर्क, औपचारिक पैरामीटर प्रकार, स्थानीय प्रकार, फ़ील्ड प्रकार या संपत्ति प्रकार के रूप में उपयोग नहीं कर सकते। इसका कोई प्रकार के रूप में कोई अर्थ नहीं है; बल्कि, यह एक तथ्य है कि वर्चुअल मशीन के ढेर पर एक विधि कॉल का क्या प्रभाव पड़ता है। लेकिन वर्चुअल मशीन सिर्फ इतना है: एक वर्चुअल मशीन। असली मशीन एक रजिस्टर में लौटाए गए मान (आमतौर पर x86 पर EAX) को रखेगी और स्टैक को बिल्कुल भी प्रभावित नहीं करेगी! एक प्रकार के रूप में शून्य केवल एक बुरा विचार है।
इससे भी बदतर: जब एक पॉइंटर प्रकार में उपयोग किया जाता है, void*
तो इसका मतलब है कि रिटर्न प्रकार के रूप में उपयोग किए जाने से इसका मतलब पूरी तरह से अलग है। अब इसका अर्थ है "अज्ञात प्रकार के भंडारण स्थान के लिए एक संकेतक", जिसका इसके अर्थ के साथ कुछ भी करने के लिए कुछ भी नहीं है "एक विधि जो किसी भी मूल्य को वापस नहीं करती है।"
हम void*
एक पॉइंटर प्रकार के साथ बदल सकते हैं IntPtr
। (और के void**
साथ IntPtr*
और इतने पर।) हम शून्य को "यूनिट" के साथ एक वापसी प्रकार के रूप में बदल सकते हैं, एक प्रकार जिसका एक एकल मूल्य है, अर्थात् शून्य। सीएलआर का कार्यान्वयन तब यह तय कर सकता है कि एक इकाई-टाइप फ़ंक्शन कॉल रजिस्टर या स्टैक के अपने उपयोग को उचित रूप से अनुकूलित कर सकता है, यह जानते हुए कि "वापस लौटाए जा रहे" नल को सुरक्षित रूप से अनदेखा किया जा सकता है।
ऐसी दुनिया में आपको अलग Func<A, R>
और Action<T>
प्रतिनिधियों की आवश्यकता नहीं है । Action<T>
बस है Func<T, Unit>
।