लोकल फंक्शन्स एक प्रकार के प्राइवेट मेथड होते हैं जो किसी अन्य सदस्य (मेथड, कंस्ट्रक्टर, प्रॉपर्टी आदि) के अंदर नेस्टेड होते हैं। उन्हें केवल उनके कंटेनिंग मेंबर से कॉल किया जा सकता है।
लोकल फंक्शन्स कहाँ डिक्लेयर किए जा सकते हैं?
- मेथड्स (विशेष रूप से इटरेटर और async मेथड्स)
- कंस्ट्रक्टर्स
- प्रॉपर्टी एक्सेसर्स
- इवेंट एक्सेसर्स
- अनाम मेथड्स
- लैम्ब्डा एक्सप्रेशन्स
- फाइनलाइज़र्स
- अन्य लोकल फंक्शन्स
उदाहरण 1: बेसिक लोकल फंक्शन
class Program {
public static void Main() {
// लोकल फंक्शन डिक्लेरेशन
void AddTwoNumbers(int a, int b) {
System.Console.WriteLine(a + b);
}
// कॉल
AddTwoNumbers(1, 2); // आउटपुट: 3
Console.ReadLine();
}
}
उदाहरण 2: आउट पैरामीटर के साथ
class Program {
public static void Main() {
void AddTwoNumbers(int a, int b, out int c) {
c = a + b;
}
AddTwoNumbers(1, 2, out int c); // इंलाइन आउट वेरिएबल (C# 7.0)
System.Console.WriteLine(c); // आउटपुट: 3
Console.ReadLine();
}
}
उदाहरण 3: इटरेटर मेथड में लोकल फंक्शन
public IEnumerable<int> GetNumbers() {
// वैलिडेशन लोकल फंक्शन में
void Validate() {
if (someCondition) throw new ArgumentException();
}
Validate();
// इटरेटर लॉजिक
for (int i = 0; i < 10; i++) {
yield return i;
}
}
उदाहरण 4: Async मेथड में लोकल फंक्शन
public async Task<string> DownloadDataAsync(string url) {
async Task<string> DownloadWithRetry(string u, int retries) {
for (int i = 0; i < retries; i++) {
try {
return await httpClient.GetStringAsync(u);
}
catch when (i < retries - 1) {
await Task.Delay(1000);
}
}
throw new Exception("Failed after retries");
}
return await DownloadWithRetry(url, 3);
}
लोकल फंक्शन्स vs लैम्ब्डा एक्सप्रेशन्स
| विशेषता | लोकल फंक्शन | लैम्ब्डा |
|---|---|---|
| नाम | हाँ (रीडेबिलिटी) | नहीं (अनाम) |
| रिकर्सन | आसान (नाम से कॉल) | मुश्किल (डेलिगेट आवश्यक) |
| पैरामीटर्स | ref/out/params समर्थन | सीमित |
| पेरफॉरमेंस | कोई डेलिगेट आवंटन नहीं | डेलिगेट आवंटन |
| स्कोप | केवल कंटेनिंग मेंबर | कहीं भी पास किया जा सकता है |
लाभ
- कैप्सुलेशन: हेल्पर लॉजिक छिपाता है
- पेरफॉरमेंस: डेलिगेट आवंटन से बचाता है
- रीडेबिलिटी: नामित, संरचित कोड
- रिकर्सन: स्वाभाविक रूप से समर्थित