delegate, Action/Func, closures
delegates के माध्यम से व्यवहार पास करें: custom delegates घोषित करें, अंतर्निहित Action/Func का उपयोग करें और देखें कि lambdas variables को कैसे capture करते हैं (closures)।
delegate, Action/Func, closures, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 3 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
डेलीगेट का परिचय
लक्ष्य: विधियों को डेटा की तरह इस्तेमाल करना।
- एक delegate प्रकार परिभाषित करें
- Action/Func इस्तेमाल करें
- लैम्ब्डा बनाएँ
- क्लोज़र (कैप्चर किए गए चर) समझें
कस्टम डेलीगेट की मूल बातें
delegate एक प्रकार-सुरक्षित फ़ंक्शन पॉइंटर है। संगत विधियाँ असाइन करें और उन्हें फ़ंक्शन की तरह लागू करें।
using System;
// Custom delegate type: a method taking two ints and returning int
public delegate int Op(int x, int y);
public class Program
{
static int Add(int a, int b) { return a + b; }
static int Mul(int a, int b) { return a * b; }
public static void Main(string[] args)
{
Op f = Add; // method group conversion
Console.WriteLine(f(2, 3)); // 5
f = Mul;
Console.WriteLine(f(2, 3)); // 6
}
}
Action और Func
Action void लौटाने वाली विधियों को दर्शाता है; Func एक मान लौटाता है। विधि समूह या लैम्ब्डा इस्तेमाल करें।
using System;
public class Program
{
static void Log(string s) { Console.WriteLine("LOG: " + s); }
public static void Main(string[] args)
{
Action<string> a = Log; // no return
a("hello");
Func<int, int, int> sum = delegate(int x, int y) { return x + y; }; // lambda/anon method
Console.WriteLine(sum(3, 4)); // 7
// Method group to Func
Func<string, int> len = GetLen;
Console.WriteLine(len("abc")); // 3
}
static int GetLen(string s) { return s == null ? 0 : s.Length; }
}
क्लोज़र का प्रदर्शन
क्लोज़र बाहरी क्षेत्र के चरों को कैप्चर करता है। यह चर उस विधि से अधिक समय तक जीवित रहता है जिसने डेलीगेट बनाया था।
using System;
public class Program
{
public static void Main(string[] args)
{
int counter = 0; // captured variable (lives as long as delegate)
Action inc = delegate() { counter = counter + 1; Console.WriteLine(counter); };
inc(); // 1
inc(); // 2
Console.WriteLine("Final=" + counter); // 2
}
}
उच्च-क्रम विधि
व्यवहार को अनुकूलित करने के लिए Func या Action पास करें। यही कई API (और LINQ) का आधार है।
using System;
public class Program
{
// Apply a transform to each number and sum the results
static int SumBy(int[] xs, Func<int, int> transform)
{
int total = 0;
for (int i = 0; i < xs.Length; i++)
{
total += transform(xs[i]);
}
return total;
}
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3 };
int sumSquares = SumBy(data, delegate(int x) { return x * x; });
Console.WriteLine(sumSquares); // 14
}
}
डेलीगेट के सुझाव
सुझाव:
- अतिरिक्त कस्टम डेलीगेट प्रकारों से बचने के लिए Action/Func को प्राथमिकता दें।
- लैम्ब्डा को छोटा और स्पष्ट रखें।
- कैप्चर किए गए चरों का ध्यान रखें; उनका मान बाद में बदल सकता है।
- जब कोई नामित विधि पहले से हस्ताक्षर से मेल खाती हो, तो विधि समूह इस्तेमाल करें।
Func और Action का अर्थ
पुनरावृत्ति
पुनरावृत्ति: डेलीगेट घोषित करें, Action/Func इस्तेमाल करें और छोटी लैम्ब्डा लिखें। क्लोज़र लैम्ब्डा को स्थानीय चरों को कैप्चर करने देते हैं—सावधानी से इस्तेमाल करें।
एआई शिक्षक के साथ C# सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 93
- पाठ
- 346
अक्सर पूछे जाने वाले प्रश्न
क्या “delegate, Action/Func, closures” पाठ निःशुल्क है?
हाँ—“delegate, Action/Func, closures” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।
“delegate, Action/Func, closures” में मैं क्या सीखूँगा?
delegates के माध्यम से व्यवहार पास करें: custom delegates घोषित करें, अंतर्निहित Action/Func का उपयोग करें और देखें कि lambdas variables को कैसे capture करते हैं (closures)। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 1वाँ पाठ है।
“delegate, Action/Func, closures” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- delegate, Action/Func, closures
- Events: publish/subscribe, event keyword
- Event पैटर्न और समस्याएँ (memory leaks)