.net से पहले, सामान्य पैटर्न TryXX
विधियों को केवल पास-बाय-रेफरेंस तर्क को अनमोडिफाइड छोड़ने के लिए था। यह एक बहुत ही उपयोगी पैटर्न था, क्योंकि यह है कि कोड जिसका कोई डिफ़ॉल्ट मान का उपयोग करने की तरह कुछ कर सकता है चाहता था मतलब:
MyNum = 5;
TryParsing(myString, &myNum);
कोड था कि एक डिफ़ॉल्ट मान का उपयोग नहीं करना चाहता इस्तेमाल कर सकते हैं, जबकि:
if (TryParsing(myString, &myNum))
{ .. code that uses myNum .. }
else
{ .. code that doesn't use myNum .. }
पूर्व उपयोग में, कॉलिंग कोड को सुनिश्चित करना होगा कि myNum
कॉल से पहले शुरू किया गया था, लेकिन TryParsing
वापसी मूल्य के बारे में चिंता करने की आवश्यकता नहीं होगी। बाद के उपयोग में, कॉलिंग कोड को वापसी मूल्य के बारे में चिंता करनी होगी, लेकिन कॉल से पहले myNum
प्रारंभ करना होगा। TryParsing
दिनचर्या को स्वयं चिंता करने की आवश्यकता नहीं होगी कि किस उद्देश्य का इरादा था।
सी # इस तरह के पैटर्न को बहुत अच्छी तरह से अनुमति नहीं देता है, हालांकि, TryParsing
किसी अन्य भाषा में लिखा नहीं जाता है। या तो TryParsing
को इस तरह से लिखा जाना चाहिए कि myNum
का पिछला मूल्य बिना शर्त के ओवरराइट किया जाएगा, कॉलर को बिना शर्त रूप से इसे प्रारंभ करना होगा, या दो परिदृश्यों के लिए विभिन्न विधियों को प्रदान किया जाना चाहिए। यदि TryParsing
विधि किसी अन्य भाषा में लिखी गई थी, तो यह सिद्धांत में पुराने शैली के तरीकों की तरह व्यवहार कर सकता है (सफलता पर तर्क लिखें, और यदि इसे नहीं तो अकेला छोड़ दें) जबकि इसे अभी भी out
पैरामीटर कहा जाता है। हालांकि, मैं इसकी अनुशंसा नहीं करता, क्योंकि क्विर्की व्यवहार उस out
पैरामीटर तक ही सीमित नहीं होगा।
पर विचार करें, उदाहरण के लिए, उस शैली की एक विधि प्रकार fooStruct
का एक तर्क का इस्तेमाल किया है, और fooStruct
एक निर्माता की तरह देखा था:
fooStruct(string st)
{
fooStruct.TryParse(st, out this);
}
संकलक इस तरह के एक निर्माता के साथ पूरी तरह खुशी होगी, जब से यह "निश्चित रूप से" this
लिखता है। दूसरी ओर, यदि कुछ अन्य कोड है:
while(someCondition)
{
var s = new fooStruct(someString);
...
}
एक उम्मीद कर सकते हैं कि s
या तो एक प्रारंभ संरचना का आयोजन करेगा (यदि someString
मान्य है) या खाली हो (अगर यह नहीं है)। उस कोड के बारे में कुछ भी सुझाव नहीं देगा कि s
लूप की पुनरावृत्ति के बीच अपना मान रख सकता है। फिर भी, यह वही है जो संभवतः होगा।
और इसके अलावा, यदि आप इस परिणाम की परवाह करते हैं कि आप डिफ़ॉल्ट का उपयोग नहीं करना चाहते हैं, तब तक यह स्पष्ट रूप से वह मान नहीं था जो XYZ (पार्स, इत्यादि) था।), तो आपको वास्तव में विधि से वापसी मूल्य की जांच करनी चाहिए। –
अगर उपभोक्ता को झूठी वापसी का प्रयास करने का कोई कारण नहीं है तो उपभोक्ता के बारे में सोचा नहीं था। –