ऐसे समय होते हैं, जब मुझे किसी पद्धति में से किसी विधि में दिए गए मान को संशोधित करना होगा। एक उदाहरण इस विधि के रूप में एक स्ट्रिंग sanitizing होगा:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
यह विशुद्ध रूप से हानिरहित है क्योंकि Name
तर्क को संदर्भ से पारित नहीं किया जा रहा है। हालांकि, अगर, किसी कारण से, भविष्य में एक डेवलपर रेफरी द्वारा पारित सभी मूल्यों का फैसला करता है, तो स्ट्रिंग के किसी भी सैनिटाइजिंग को विधि के बाहर मूल्य को प्रभावित करेगा जो हानिकारक परिणाम हो सकता है।
इसलिए, मैं तर्क को पुन: सौंपने के बजाय, मैं हमेशा एक स्थानीय प्रतिलिपि बनाता हूं जैसे:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
इससे यह सुनिश्चित होता है कि मूल्य में परिवर्तन करने वाली थ्रू को पारित कर दिया जाता है और यह विधि के बाहर जाने वाले को कभी प्रभावित नहीं करेगा, लेकिन मैं सोच रहा हूं कि क्या मैं इस बारे में अत्यधिक पागल हो रहा हूं।
if (param == NULL) param = default_value;
?
by ref
जो कि पारित नहीं हुआ था पहले से रास्ता, और इसलिए किसी कारण से स्थानीय पहुंच को गैर-स्थानीय पहुंच में परिवर्तित करना, उसके पास हमेशा परिणामों की सावधानीपूर्वक जांच करना है।
Name = Name.ToUpper();
के मूल्य के रूप में लाइन आपके सिर में अनुसरण करने के लिए कोड को कठिन बनाती हैName
। आपका दूसरा उदाहरण केवल भविष्य का प्रमाण नहीं है, यह क्या करना है, इसका कारण आसान है।