सामान्य रूप से, my article about parameter passing पढ़ें।
मूल विचार है: तर्क संदर्भ द्वारा पारित कर दिया है
है, तो विधि के भीतर पैरामीटर मान में परिवर्तन के रूप में अच्छी तरह से तर्क को प्रभावित करेगा।
सूक्ष्म हिस्सा है कि पैरामीटर एक संदर्भ प्रकार है, तो कर रही है अगर:
someParameter.SomeProperty = "New Value";
है नहीं पैरामीटर का मान बदल रहा है। पैरामीटर सिर्फ एक संदर्भ है, और उपर्युक्त पैरामीटर को संदर्भित करता है, केवल वस्तु के भीतर डेटा को बदलता नहीं है।
someParameter = new ParameterType();
अब उदाहरण के लिए
:: यहाँ पैरामीटर का मान बदल रहा सही मायने में का एक उदाहरण है
सरल उदाहरण: रेफरी द्वारा या मूल्य
class Test
{
static void Main()
{
int i = 10;
PassByRef(ref i);
// Now i is 20
PassByValue(i);
// i is *still* 20
}
static void PassByRef(ref int x)
{
x = 20;
}
static void PassByValue(int x)
{
x = 50;
}
}
अधिक जटिल से एक पूर्णांक गुजर उदाहरण: संदर्भ प्रकारों का उपयोग
class Test
{
static void Main()
{
StringBuilder builder = new StringBuilder();
PassByRef(ref builder);
// builder now refers to the StringBuilder
// constructed in PassByRef
PassByValueChangeContents(builder);
// builder still refers to the same StringBuilder
// but then contents has changed
PassByValueChangeParameter(builder);
// builder still refers to the same StringBuilder,
// not the new one created in PassByValueChangeParameter
}
static void PassByRef(ref StringBuilder x)
{
x = new StringBuilder("Created in PassByRef");
}
static void PassByValueChangeContents(StringBuilder x)
{
x.Append(" ... and changed in PassByValueChangeContents");
}
static void PassByValueChangeParameter(StringBuilder x)
{
// This new object won't be "seen" by the caller
x = new StringBuilder("Created in PassByValueChangeParameter");
}
}
स्रोत
2009-08-18 10:48:03
डुप्लिकेट http://stackoverflow.com/questions/373419/whats-the-difference-between-a-parameter-passed-by-reference-vs-passed-by-value –
यह * एक प्रकार का डुप्लिकेट है, लेकिन यह विशेष रूप से सी # उदाहरणों के लिए पूछता है - जबकि संदर्भित प्रश्न में कोई सी # उदाहरण नहीं हैं। बहुत अच्छी * सामान्य * चर्चा, निश्चित रूप से, लेकिन मुझे नहीं लगता कि यह वास्तव में भाषा-विशिष्ट लोगों के लिए भी दर्द होता है। –
@ जोन स्कीट: मौजूदा प्रश्न में सी # सिंटैक्स के साथ उत्तर देने का सही समाधान नहीं है? संभवतः एक मौजूदा उत्तर को संपादित करना। – dmckee