मुझे पता है कि मैं इस सवाल के लिए अविश्वसनीय रूप से देर से हूं, लेकिन मुझे लगता है कि उत्तर प्रासंगिक हो जाएगा क्योंकि सी # की नवीनतम प्रमुख पुनरावृत्ति रिलीज के करीब आती है, फिर जारी की जाती है। C # 8.0 में एक बड़ा बदलाव आएगा, C # मानेंगे कि सभी प्रकार को शून्य नहीं माना जाता है।
Mads Torgersen के अनुसार:
समस्या यह है कि अशक्त संदर्भ इतने उपयोगी हैं। C # में, वे हर संदर्भ प्रकार के डिफ़ॉल्ट मान हैं। डिफ़ॉल्ट मान और क्या होगा? एक चर का दूसरा मूल्य क्या होगा, जब तक आप यह तय नहीं कर सकते कि इसे और क्या सौंपा जाए? जब तक आप इसे भरने के लिए चारों ओर नहीं हो जाते, तब तक हम संदर्भों के एक नए तरीके से आवंटित सरणी को कैसे प्रदान कर सकते हैं?
इसके अलावा, कभी-कभी अशक्त और अपने आप में एक समझदार मूल्य होता है। कभी-कभी आप इस तथ्य का प्रतिनिधित्व करना चाहते हैं कि, कहते हैं, एक फ़ील्ड का कोई मूल्य नहीं है। पैरामीटर के लिए "कुछ भी नहीं" पास करना ठीक है। जोर कभी कभी, हालांकि है। और यहाँ समस्या का एक और हिस्सा है: C # जैसी भाषाएं आपको व्यक्त नहीं करती हैं कि यहाँ एक अशक्त एक अच्छा विचार है या नहीं।
इसलिए मैड्स द्वारा उल्लिखित संकल्प है:
हम मानते हैं कि यह एक संदर्भ नहीं होना चाहते हैं और अधिक सामान्य है। अशक्त संदर्भ प्रकार दुर्लभ प्रकार होंगे (हालांकि हमारे पास कितना है, यह बताने के लिए हमारे पास अच्छा डेटा नहीं है), इसलिए वे ऐसे हैं जिन्हें एक नए एनोटेशन की आवश्यकता होनी चाहिए।
भाषा में पहले से ही एक धारणा है - और अशक्त मूल्य प्रकार के लिए एक वाक्यविन्यास। दोनों के बीच सामंजस्य भाषा को वैचारिक रूप से आसान और भाषाई रूप से सरल बना देगा।
यह सही लगता है कि जब तक आपने सक्रिय रूप से यह निर्णय नहीं लिया कि आप उन्हें चाहते हैं, तब तक आप अपने या अपने उपभोक्ता को बोझिल मानों से बोझिल नहीं करना चाहिए। अशक्तियाँ, उनकी अनुपस्थिति नहीं, वह चीज होनी चाहिए जिसे आपको स्पष्ट रूप से चुनना है।
वांछित सुविधा का एक उदाहरण:
public class Person
{
public string Name { get; set; } // Not Null
public string? Address { get; set; } // May be Null
}
पूर्वावलोकन Visual Studio 2017, 15.5.4+ पूर्वावलोकन के लिए उपलब्ध है।