Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में मेथड को पैरामीटर्स पास करना

C# में मेथड पैरामीटर्स पास करना

C# डिफ़ॉल्ट रूप से **वैल्यू द्वारा पासिंग (Pass by Value)** करता है: मेथड को आर्गुमेंट की **कॉपी** मिलती है। मूल वेरिएबल अपरिवर्तित रहता है। रेफरेंस टाइप्स के लिए, रेफरेंस की कॉपी पास होती है (ऑब्जेक्ट नहीं)।

पैरामीटर पासिंग मोड्स

मोडकीवर्डविवरणउदाहरण
वैल्यू द्वारा (डिफ़ॉल्ट)(कोई नहीं)वैल्यू की कॉपी पास होती हैvoid M(int x)
रेफरेंस द्वाराrefवेरिएबल का रेफरेंस पास होता है (पढ़/लिख)void M(ref int x)
आउटपुट पैरामीटरoutमेथड को वेरिएबल असाइन करना आवश्यकvoid M(out int x)
इनपुट-ओनली रेफरेंसinरीड-ओनली रेफरेंस (C# 7.2+)void M(in int x)
पैरामीटर एरेparamsवेरिएबल संख्या में आर्गुमेंट्सvoid M(params int[] xs)

उदाहरण: वैल्यू द्वारा पासिंग (डिफ़ॉल्ट)

using System;

class NumberManipulator {
    public void Swap(int x, int y) {
        int temp = x;
        x = y;
        y = temp;
        // केवल लोकल कॉपीज बदलीं
    }
}

class Program {
    static void Main() {
        NumberManipulator n = new NumberManipulator();
        int a = 50, b = 150;
        
        Console.WriteLine($"Before: a={a}, b={b}"); // 50, 150
        n.Swap(a, b);
        Console.WriteLine($"After:  a={a}, b={b}"); // 50, 150 (अपरिवर्तित!)
    }
}

आउटपुट

Before: a=50, b=150
After:  a=50, b=150

ref के साथ स्वैप (काम करता है)

public void SwapRef(ref int x, ref int y) {
    int temp = x; x = y; y = temp;
}

// कॉल
n.SwapRef(ref a, ref b);
Console.WriteLine($"After ref swap: a={a}, b={b}"); // 150, 50

out पैरामीटर (मल्टीपल रिटर्न वैल्यूज के लिए)

public bool TryParseInt(string s, out int result) {
    return int.TryParse(s, out result);
}

// कॉल
if (TryParseInt("123", out int value)) {
    Console.WriteLine(value); // 123
}

in पैरामीटर (बड़े स्ट्रक्चर्स के लिए प्रदर्शन)

// बड़ा स्ट्रक्चर कॉपी किए बिना पास करें
public void Process(in LargeStruct data) {
    // data रीड-ओनली; असाइनमेंट कंपाइल एरर
    Console.WriteLine(data.SomeField);
}

रेफरेंस टाइप्स के साथ व्यवहार

class Person { public string Name; }

void ChangeName(Person p) {
    p.Name = "Changed";     // ऑब्जेक्ट म्यूटेट होता है (रेफरेंस कॉपी)
    p = new Person();       // लोकल रेफरेंस बदला, मूल नहीं
}

Person person = new Person { Name = "Original" };
ChangeName(person);
Console.WriteLine(person.Name); // "Changed" - ऑब्जेक्ट बदल गया!

सारांश

  • वैल्यू टाइप्स (int, struct): डिफ़ॉल्ट = कॉपी। बदलने के लिए ref/out।
  • रेफरेंस टाइप्स (class): डिफ़ॉल्ट = रेफरेंस कॉपी। ऑब्जेक्ट म्यूटेट हो सकता है; रीअसाइनमेंट कॉलर को प्रभावित नहीं करता। ref से रीअसाइनमेंट संभव।
  • in: बड़े स्ट्रक्चर्स के लिए रीड-ओनली रेफरेंस (कॉपी बचाता है)।
  1. - C# में वेरिएबल को रेफरेंस कैसे असाइन करें?

    वेरिएबल को रेफरेंस असाइन करने के लिए ref कीवर्ड का उपयोग करें। एक रेफरेंस पैरामीटर वेरिएबल के मेमोरी लोकेशन का रेफरेंस होता है। जब आप पैरामीटर्स को रेफरेंस द्वारा पास करते हैं, तो वैल्यू पैरामीटर्स के विपरीत, इन पैरामीटर्स के लिए नया स्टोरेज लोकेशन नहीं बनाया जाता। रेफरेंस पैरामीटर्स को ref कीवर्ड क

  1. - C# में पैरामीटर्स पास करने के विभिन्न तरीके क्या हैं?

    जब पैरामीटर्स वाले मेथड को कॉल किया जाता है, तो आपको निम्न तीन तरीकों में से किसी का उपयोग करके पैरामीटर्स को मेथड में पास करना होता है:रेफरेंस पैरामीटर्सयह मेथड किसी आर्गुमेंट के मेमोरी लोकेशन का रेफरेंस फॉर्मल पैरामीटर में कॉपी करता है। इसका मतलब है कि पैरामीटर में किए गए परिवर्तन आर्गुमेंट को प्र

  1. - पायथन फंक्शन में आर्गुमेंट्स को वैल्यू द्वारा कैसे पास करें?

    दिए गए कोड के लिए आउटपुट निम्नानुसार है: b = 30 a = [10] इस मामले में, a वैल्यू द्वारा पास किया हुआ लगता है, क्योंकि फंक्शन कॉल के बाद भी मान अपरिवर्तित रहता है। इसलिए यह स्पष्ट है कि आर्गुमेंट्स पायथन फंक्शन में वैल्यू द्वारा पास किए गए हैं।