2009-09-10 10 views
5

के रूप में लौटने विधि से गुजर रहा है, तो मैं इस तरह कोड है:के रूप में देर से संभव के रूप में चर घोषणा और एक पैरामीटर

string s = MyClass.GetString(); // Returns string containing "hello world"; 
ProcessString(s); 

इस से किसी भी धीमी है?

ProcessString(MyClass.GetString()); 

यदि हां, तो क्यों? दूसरे उदाहरण में, संकलक आमतौर पर GetString() से एक चर बनाते हैं; विधि जो एक स्ट्रिंग देता है?

इसके अलावा, जितनी देर हो सके वैरिएबल घोषित करने का क्या फायदा है? क्या इससे जीसी लाभ होता है? यदि हां, तो कैसे (मैं जीसी जेन्स के मामले में मान रहा हूं)?

धन्यवाद

उत्तर

10

नहीं है, संकलक उन उदाहरण दोनों के लिए समान आईएल उत्सर्जित करेगा (नहीं सभी उदाहरण इस तरह, ध्यान रखें कि आप, सिर्फ इस उदाहरण विशेष रूप से)।

याद रखें कि सी # में सभी स्थानीय चर विधि के शीर्ष पर आईएल में एक साथ मिलते हैं, इसलिए जब आप उन्हें घोषित करते हैं तो यह वास्तव में कोई फर्क नहीं पड़ता क्योंकि सीएलआर विधि में प्रवेश करने के लिए उनके लिए स्थान आवंटित करेगा।

जितना संभव हो सके वैरिएबल घोषित करने का लाभ पूरी तरह से आपके कोड की पठनीयता में सुधार करना है। जितना संभव हो सके वैरिएबल को घोषित करना जहां उन्हें उपयोग किया जाता है, वे आपके कोड के पाठकों को संदर्भ के बारे में प्रासंगिक जानकारी प्राप्त करने की अनुमति देता है कि वेरिएबल क्या है और अकेले चर के नाम से परे है।

+0

धन्यवाद। तो दो कोड उदाहरणों के लिए, वे हुड के नीचे काफी समान हैं। मैं अपनी दूसरी क्वेरी पर आपका उत्तर पूरी तरह से समझता हूं। :) – dotnetdev

+0

यदि आप ब्लॉक के शीर्ष पर चर घोषित करते हैं, तो बाद में उन्हें असाइन करें, आप अनावश्यक रूप से अपने डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल कर रहे हैं। शायद ज्यादातर मामलों में एक बड़ा सौदा नहीं है। –

+0

जॉर्ज वी रेली ने कहा, "यदि आप ब्लॉक के शीर्ष पर चर घोषित करते हैं, तो बाद में उन्हें असाइन करें, आप अनावश्यक रूप से अपने डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल कर रहे हैं" लेकिन यह केवल सी ++ में सच है। प्रश्न को सी # के रूप में टैग किया गया था और इस मामले में कोई कन्स्ट्रक्टर नहीं बुलाया गया था। संदर्भ में मूल्य शून्य है। – alexk7

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