2008-11-09 15 views
6

सी #: आप किसी ऑब्जेक्ट को फ़ंक्शन पैरामीटर में कैसे पास करते हैं?सी #: आप किसी ऑब्जेक्ट को फ़ंक्शन पैरामीटर में कैसे पास करते हैं?

public void MyFunction(TextBox txtField) 
{ 
    txtField.Text = "Hi."; 
} 

उपर्युक्त मान्य होगा? या?

उत्तर

10

जब तक आप एक अलग धागे में नहीं हैं, हाँ कोड नमूना मान्य है। एक टेक्स्टबॉक्स (या अन्य विंडोज़ फॉर्म आइटम) अभी भी ऑब्जेक्ट्स हैं जिन्हें विधियों द्वारा पारित और छेड़छाड़ की जा सकती है।

+0

यह और अपने तेज प्रतिक्रिया स्पष्ट करने के लिए धन्यवाद। –

8

यूप, यह काम करेगा। आप वास्तव में किसी वस्तु को पार नहीं कर रहे हैं - आप ऑब्जेक्ट में संदर्भ में गुजर रहे हैं।

"Parameter passing in C#" देखें, जब यह पास-दर-रेफ बनाम पास-बाय-वैल्यू की बात आती है।

+0

शर्तों के उपयोग पर मेरी समझ को सही करने के लिए धन्यवाद। आपका उत्तर और "सूचना संदर्भ" भी अत्यधिक सराहना की जाती है। –

+0

"सी # में पारित पैरामीटर" लिंक अब मान्य नहीं है। –

+0

@ CarolinaJay65: अब फिक्स्ड। किसी कारण से pobox.com ने मेरा यूआरएल अग्रेषण खो दिया है ... –

4

किसी संदर्भ-प्रकार के लिए, यह ठीक है - आपने ऑब्जेक्ट पर संदर्भ पारित किया है, लेकिन केवल एक ही ऑब्जेक्ट है, इसलिए कॉलर में परिवर्तन दिखाई दे रहे हैं।

मुख्य समय काम "structs" (मूल्य-प्रकार) के लिए नहीं है - लेकिन वास्तव में वे वास्तव में उत्परिवर्तनीय नहीं होना चाहिए (यानी उन्हें वास्तव में संपादन योग्य गुण नहीं होना चाहिए)।

यदि आप एक struct के साथ ऐसा करना की जरूरत है, आप जोड़ सकते "रेफरी" - अर्थात

public void MyFunction(ref MyMutableStruct whatever) 
{ 
    whatever.Value = "Hi."; // but avoid mutable structs in the first place! 
} 
+0

क्यों structs mutable नहीं होना चाहिए? क्या वे कक्षाओं का हल्का वजन वाला संस्करण नहीं हैं? – DOK

+0

@ डीओके: नहीं, वे पूरी तरह से अलग हैं। वे बहुत अलग व्यवहार करते हैं, और यदि आप structs mutable बनाते हैं तो आप * समस्याओं में भाग लेंगे। सिर्फ नहीं बोल। –

+0

स्ट्रक्चर को मूल्य प्रकार के रूप में माना जाता है, ऑब्जेक्ट संदर्भ नहीं। एक संरचना उत्तीर्ण करना एक int को गुजरने जैसा है, आप जो भी परिवर्तन पूर्णांक में करते हैं वह विधि को नहीं छोड़ेगा। – Greg

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