C# आपको फ़ंक्शन्स में मेथड्स को पैरामीटर के रूप में पास करने की क्षमता प्रदान करता है, जिससे कोड की लचीलापन और पुन:प्रयोग क्षमता में महत्वपूर्ण वृद्धि होती है। यह क्षमता कॉलबैक, इवेंट हैंडलर्स और रणनीतिक पैटर्न को लागू करने के लिए महत्वपूर्ण है जहाँ रनटाइम व्यवहार विशिष्ट क्रिया को निर्धारित करता है। यह लेख इसे प्राप्त करने के विभिन्न तरीकों का पता लगाता है, जिसमें कस्टम डेलीगेट्स, Func<>
और Action<>
पर ध्यान केंद्रित किया गया है।
विषय-सूची
- पैरामीटर के रूप में मेथड्स पास करने के लिए कस्टम डेलीगेट्स का उपयोग करना
Func<>
डेलीगेट का लाभ उठानाAction<>
डेलीगेट का उपयोग करना- निष्कर्ष
पैरामीटर के रूप में मेथड्स पास करने के लिए कस्टम डेलीगेट्स का उपयोग करना
C# में डेलीगेट्स टाइप-सेफ फ़ंक्शन पॉइंटर्स के रूप में काम करते हैं। एक कस्टम डेलीगेट तैयार करने से बारीक नियंत्रण और स्पष्टता मिलती है जब मेथड सिग्नेचर बिल्ट-इन Func<>
या Action<>
डेलीगेट्स से अलग होता है। एक फ़ंक्शन पर विचार करें जो किसी संख्या पर एक ऑपरेशन करता है और फिर परिणाम प्रदर्शित करता है, जहाँ ऑपरेशन स्वयं एक पैरामीटर है।
// एक कस्टम डेलीगेट परिभाषित करें
public delegate double MathOperation(double x);
public class Example
{
public static void PerformOperationAndPrint(double num, MathOperation operation)
{
double result = operation(num);
Console.WriteLine($"Result: {result}");
}
public static double Square(double x) => x * x;
public static double Cube(double x) => x * x * x;
public static void Main(string[] args)
{
PerformOperationAndPrint(5, Square); // Output: Result: 25
PerformOperationAndPrint(5, Cube); // Output: Result: 125
}
}
MathOperation
एक डेलीगेट के रूप में कार्य करता है जो एक double
स्वीकार करने और एक double
वापस करने वाले मेथड का प्रतिनिधित्व करता है। PerformOperationAndPrint
इस डेलीगेट को स्वीकार करता है, जिससे Square
, Cube
, या किसी भी अनुरूप मेथड का उपयोग करना संभव हो जाता है।
Func<>
डेलीगेट का लाभ उठाना
Func<>
एक जेनेरिक डेलीगेट है जो शून्य या अधिक इनपुट पैरामीटर और एक रिटर्न मान वाले मेथड का प्रतिनिधित्व करता है। इसकी बिल्ट-इन प्रकृति कई परिदृश्यों को सरल बनाती है। आइए पिछले उदाहरण को फिर से देखें:
public class Example
{
public static void PerformOperationAndPrint(double num, Func<double, double> operation)
{
double result = operation(num);
Console.WriteLine($"Result: {result}");
}
public static double Square(double x) => x * x;
public static double Cube(double x) => x * x * x;
public static void Main(string[] args)
{
PerformOperationAndPrint(5, Square); // Output: Result: 25
PerformOperationAndPrint(5, Cube); // Output: Result: 125
}
}
यह कम कोड के साथ समान परिणाम प्राप्त करता है। Func<double, double>
एक double
स्वीकार करने और एक double
वापस करने वाले मेथड को निर्दिष्ट करता है। जेनेरिक प्रकार पैरामीटर विभिन्न मेथड सिग्नेचर (जैसे, Func<int, string>
) के अनुकूल होते हैं।
Action<>
डेलीगेट का उपयोग करना
Action<>
शून्य या अधिक इनपुट पैरामीटर और एक void
रिटर्न प्रकार (कोई रिटर्न मान नहीं) वाले मेथड के लिए एक जेनेरिक डेलीगेट है। इसका उपयोग तब करें जब मेथड मान वापस न करें।
public class Example
{
public static void PerformAction(string message, Action<string> action)
{
action(message);
}
public static void PrintMessage(string msg) => Console.WriteLine(msg);
public static void PrintMessageToUpper(string msg) => Console.WriteLine(msg.ToUpper());
public static void Main(string[] args)
{
PerformAction("Hello, world!", PrintMessage); // Output: Hello, world!
PerformAction("Hello, world!", PrintMessageToUpper); // Output: HELLO, WORLD!
}
}
Action<string>
एक स्ट्रिंग स्वीकार करने और कुछ भी वापस नहीं करने वाले मेथड का प्रतिनिधित्व करता है। PerformAction
विभिन्न प्रिंटिंग क्रियाओं को निष्पादित करने के लिए इसका उपयोग करता है।
निष्कर्ष
पैरामीटर के रूप में मेथड्स पास करना एक शक्तिशाली C# सुविधा है। कस्टम डेलीगेट अधिकतम नियंत्रण प्रदान करते हैं, जबकि Func<>
और Action<>
सुविधाजनक बिल्ट-इन समाधान प्रदान करते हैं। सबसे अच्छा तरीका आपके एप्लिकेशन की विशिष्ट आवश्यकताओं पर निर्भर करता है। इन तकनीकों में महारत हासिल करना अधिक अनुकूलनीय और रखरखाव योग्य C# कोड लिखने की कुंजी है।