लोड हो रहा है...

स्कोप

एक मेथड लिखें जिसका नाम mark हो और एक पैरामीटर हो: static void mark(int n)। ब्रेसेस के अंदर उस पैरामीटर को Console.WriteLine(n); से लिखें। Main से mark(4); कॉल करें। स्क्रीन पर एक पंक्ति दिखनी चाहिए: 4। नाम n केवल mark के अंदर मौजूद है। अगर आप Main से n लिखने की कोशिश करें, बिल्ड मना कर देता है। यही सीमा — कौन से नाम एक मेथड देख सकता है — इस पेज का पाठ है। पब्लिक क्लास का नाम Pine रखें।

नाम जो मेथड के अंदर रहते हैं

ओवरलोडिंग पेज पर कई paint मेथड एक नाम साझा करती थीं लेकिन पैरामीटर सूचियाँ अलग रखती थीं। यहाँ फोकस छोटा है: एक मेथड, एक पैरामीटर नाम, और वह जगह जहाँ वह नाम दिख सकता है। पैरामीटर वह नाम है जो उसी मेथड का है जो उसे घोषित करता है। उस मेथड की ब्रेसेस के बाहर नाम खत्म हो जाता है।
Pine फ़ाइल खोलें। क्लास का नाम Pine ही रहता है। यह पेज टाइप का नाम नहीं बदलता। अगर अभी भी paint डेमो बचा है और Main में वही सब है, उसे हटा दें। कोई भी twice अवशेष हटा दें। कोई भी ReadLine पंक्ति हटा दें। जो फ़ाइल आप रखते हैं वह टाइप करने का इंतज़ार नहीं करती।
Main के बाहर, फिर भी क्लास की ब्रेसेस के अंदर, लिखें static void mark(int n)। बॉडी में एक लिखने वाली पंक्ति है: Console.WriteLine(n);। इस पेज पर void रखें। आप दृश्यता देख रहे हैं, रिटर्न वैल्यू नहीं। चलाने से पहले फ़ाइल सेव करें। पूरा पहला प्रोग्राम अगले बॉक्स में है।

वह फ़ाइल जो आप रखते हैं

यह वह संस्करण है जिसे आप पहले चलाते हैं। Main कॉल रखता है। mark वह लिखने वाली पंक्ति रखता है जो n इस्तेमाल करती है।

mark writes its parameter

csharp
using System;

public class Pine
{
    public static void Main()
    {
        mark(4);
    }

    static void mark(int n)
    {
        Console.WriteLine(n);
    }
}

ऊपर से पढ़ें। using System; छोटे नाम तैयार करता है। public class Pine टाइप का नाम रखता है। public static void Main() वह जगह है जहाँ रनटाइम शुरू होता है। कॉल mark(4) मान 4 को पैरामीटर n में भेजता है। mark के अंदर Console.WriteLine(n) मान 4 लिखता है। जब mark खत्म होता है, नाम n भी खत्म हो जाता है। Main ने कभी नाम n नहीं रखा। संख्या 4 कॉल से मान के रूप में गुज़री। नाम n Main में नहीं गया। स्क्रीन पर एक पंक्ति: 4।

dotnet run से चलाएँ। प्रोग्राम एक पंक्ति लिखता है और रुक जाता है। वह आपके टाइप करने का इंतज़ार नहीं करता। अगर dotnet run इंतज़ार करे, तो ReadLine अभी फ़ाइल में है। वह पंक्ति हटाएँ और mark(4); तथा ऊपर की mark मेथड रखें। स्क्रीन 4 दिखाती है। अगर स्क्रीन ok दिखाए, तो बचा हुआ paint("ok") कॉल अभी चल रहा है। अगर स्क्रीन अक्षर n दिखाए, तो लिखने वाली पंक्ति में उद्धरण हैं: Console.WriteLine("n");। गलत पंक्ति दिखाने वाली स्क्रीन के लिए .NET SDK दोबारा इंस्टॉल न करें।

एक पूरा रन क्रम से चलें। C# Main से शुरू होता है। कॉल mark(4) मान 4 को पैरामीटर n में भेजता है। mark के अंदर WriteLine(n) मान 4 लिखता है। जब mark खत्म होता है, नाम n भी खत्म हो जाता है। Main ने कभी नाम n नहीं रखा। संख्या 4 कॉल से मान के रूप में गुज़री। नाम n Main में नहीं गया।
अगर आप कॉल के बाद Main के अंदर Console.WriteLine(n); जोड़ें, बिल्ड बताता है कि नाम n नहीं मिला। वह त्रुटि ही पाठ काम कर रहा है: n कभी Main में घोषित नहीं हुआ। उस पंक्ति को Main से हटाकर ठीक करें, या अगर वहाँ लोकल चाहिए तो अलग नाम घोषित करें। उम्मीद न करें कि mark का पैरामीटर अपने आप Main में दिख जाए।

पैरामीटर के बगल में लोकल नाम

mark के अंदर आप ऐसा नया नाम भी घोषित कर सकते हैं जो पैरामीटर नहीं है। वह लोकल नाम केवल mark की ब्रेसेस के बीच रहता है। शुरुआती की आम उम्मीद यह है कि Main में घोषित नाम क्लास की हर मेथड में अपने आप दिखेगा। इस आकार पर ऐसा नहीं है। अगर Main में int room = 4; है और mark बिना प्राप्त किए room लिखने की कोशिश करे, बिल्ड mark के अंदर room नहीं ढूँढ पाता। ठीक तरीका मान भेजना है: mark(room); और mark अभी भी mark(int n) के रूप में घोषित रहे।

Main के लोकल को mark में भेजें

Main के अंदर घोषित करें int room = 4;। कॉल करें mark(room);। mark के अंदर n ही लिखते रहें। स्क्रीन अभी भी 4 दिखाती है। Main में लोकल नाम room है। mark में पैरामीटर नाम n है। वे अलग जगहों पर अलग नाम हैं। यात्रा करने वाली चीज़ मान 4 है।

pass room into mark

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int room = 4;
        mark(room);
    }

    static void mark(int n)
    {
        Console.WriteLine(n);
    }
}

यह दूसरी फ़ाइल है। यह वही दृश्यता Main के लोकल के साथ सिखाती है। dotnet run चलाएँ। आप अभी भी एक पंक्ति देखते हैं: 4। अगर आप room को 9 कर दें और मेथड बॉडी न छुएँ, स्क्रीन 9 दिखाती है। मेथड अभी भी वही मान लिखती है जो n में आया। Main room भी लिख सकता है अगर आप Main में Console.WriteLine(room); जोड़ें — वह नाम वहाँ उसी का है। Main अभी भी n नहीं लिख सकता। room आकार देखने के बाद, अगर रखना वाला आकार एक कॉल है तो वह फ़ाइल वापस रखें: Main में mark(4);।
अगर mark अपना लोकल घोषित करे — उदाहरण int tag = 1; ब्रेसेस के अंदर — वह tag Main के लिए अदृश्य है। Main में Console.WriteLine(tag); आज़माना उसी कारण से असफल होता है जिस कारण Main से n लिखना। mark की ब्रेसेस अंदर घोषित नामों के लिए दीवार हैं।

दीवार क्या बचाती है

अलगाव को सादे शब्दों में पढ़ें। Main में घोषित नाम Main में रहते हैं जब तक आप उनके मान कॉल में न भेजें। mark में घोषित नाम — पैरामीटर और लोकल — mark में रहते हैं। कॉल मान ले जाती है, स्वयं नाम नहीं। पिछले पेज की ओवरलोडिंग अलग कौशल है: एक साझा मेथड नाम वाली कई मेथड। स्कोप इस बारे में है कि वेरिएबल या पैरामीटर नाम सोर्स में कहाँ दिख सकता है।
बचा हुआ paint डेमो उसी फ़ाइल में बैठ सकता है और स्क्रीन भ्रमित कर सकता है अगर Main अभी भी paint("ok") कॉल करे। Main को उस mark कॉल तक साफ़ करें जिसकी आप जाँच कर रहे हैं। mark को Main की ब्रेसेस के अंदर नेस्ट न करें। मेथड क्लास के अंदर, Main के बगल में बैठती हैं।
Main में Console.WriteLine("n"); लिखना उद्धरण में अक्षर n लिखता है। वह पैरामीटर नहीं लिखता। जब आप कॉल से आया मान चाहते हैं तो Console.WriteLine(n) को mark के अंदर रखें। खाली कोष्ठक वाला mark(); तब असफल होता है जब हेडर अभी भी mark(int n) कहता है — कॉल को एक int भेजना चाहिए, चाहे लिटरल जैसे 4 हो या लोकल जैसे room।

आप mark(int n) लिख सकते हैं, उस मेथड के अंदर n लिख सकते हैं, और n को Main से बाहर रख सकते हैं। आप Main में room घोषित कर सकते हैं और room को mark में भेज सकते हैं। स्क्रीन वह मान दिखाती है जो कॉल से गुज़रा। नाम अपने आप ब्रेसेस से रिस नहीं जाते। अगला पेज recursion है, जहाँ मेथड खुद को छोटे आर्ग्युमेंट से कॉल करती है जब तक रोकने वाली शर्त श्रृंखला खत्म न करे।

स्क्रीन वही मान रखती है जो गुज़रा

जो फ़ाइल आप रखते हैं वह 4 लिखती है जब Main mark(4); कॉल करता है। नाम n mark के अंदर लिखने वाली पंक्ति में है, और अक्षर n स्क्रीन पर छपी लेबल के रूप में नहीं आता जब तक आपने उसे उद्धरण में न रखा हो। mark को Main के अंदर नेस्ट करना इस पाठ का आकार नहीं है।

🧠 अपने ज्ञान की परीक्षा करें

शुरू करने के लिए तैयार

अपने ज्ञान की परीक्षा करें

इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं

❓
6
प्रश्न
🎯
70%
पास करने के लिए
♾️
∞
समय
🔄
∞
प्रयास

📝 निर्देश

  • हर प्रश्न को ध्यान से पढ़ें
  • हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
  • आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
  • आपकी प्रगति शीर्ष पर दिखाई जाएगी