C# में डेलीगेट पैरामीटर के रूप में कोड ब्लॉक पास करने के लिए एनोनिमस मेथड्स का उपयोग करें। एनोनिमस मेथड्स बिना नाम के मेथड्स होते हैं, केवल बॉडी होती है।
एनोनिमस मेथड्स को इस तरह घोषित कर सकते हैं:
delegate void DemoMethod(int n);
...
DemoMethod dm = delegate(int a)
{
Console.WriteLine("हमारा एनोनिमस मेथड: {0}", a);
};
ऊपर दिखाए अनुसार, एनोनिमस मेथड की बॉडी निम्नलिखित है:
Console.WriteLine("हमारा एनोनिमस मेथड: {0}", a);
उदाहरण
आइए C# में एनोनिमस मेथड्स को लागू करने का कोड देखें:
using System;
delegate void Demo(int n);
namespace MyDelegate
{
class TestDelegate
{
static int num = 10;
public static void DisplayAdd(int p)
{
num += p;
Console.WriteLine("नामित मेथड: {0}", num);
}
public static void DisplayMult(int q)
{
num *= q;
Console.WriteLine("नामित मेथड: {0}", num);
}
public static int GetNum()
{
return num;
}
static void Main(string[] args)
{
Demo dm = delegate(int x)
{
Console.WriteLine("एनोनिमस मेथड: {0}", x);
};
// एनोनिमस मेथड का उपयोग करके डेलीगेट कॉल करना
dm(15);
// नामित मेथड्स का उपयोग करके डेलीगेट इंस्टेंटिएट करना
dm = new Demo(DisplayAdd);
dm(10);
// दूसरे नामित मेथड का उपयोग करके डेलीगेट इंस्टेंटिएट करना
dm = new Demo(DisplayMult);
dm(4);
Console.ReadKey();
}
}
}
आउटपुट
एनोनिमस मेथड: 15 नामित मेथड: 20 नामित मेथड: 80
मुख्य बिंदु
- कोई नाम नहीं: एनोनिमस मेथड्स का कोई नाम नहीं होता, केवल पैरामीटर लिस्ट और बॉडी होती है
- डेलीगेट्स के साथ उपयोग: डेलीगेट इंस्टेंटिएशन के लिए इनलाइन कोड प्रदान करते हैं
- कैप्चर वेरिएबल्स: बाहरी स्कोप के लोकल वेरिएबल्स को कैप्चर कर सकते हैं (क्लोजर)
- C# 3.0+: लैम्ब्डा एक्सप्रेशन्स (
x => x * 2) अधिक संक्षिप्त सिंटैक्स प्रदान करते हैं - लिमिटेशन: ref/out पैरामीटर्स का उपयोग नहीं कर सकते, unsafe कोड नहीं हो सकता
नोट: आधुनिक C# में लैम्ब्डा एक्सप्रेशन्स को प्राथमिकता दी जाती है क्योंकि वे अधिक पठनीय और संक्षिप्त हैं।