C# में जेनेरिक मेथड्स (Generic Methods)
जेनेरिक मेथड्स आपको एक ही मेथड को अलग-अलग डेटा टाइप्स के साथ काम करने की अनुमति देते हैं, टाइप पैरामीटर (<T>) का उपयोग करके। यह कोड डुप्लिकेशन रोकता है और टाइप सेफ्टी सुनिश्चित करता है।
सिंटैक्स
<modifiers> <return-type> MethodName<T>(<parameters>) where T : constraints {
// बॉडी
}
उदाहरण: जेनेरिक Swap मेथड
using System;
class Program {
// जेनेरिक मेथड: किसी भी टाइप के दो वेरिएबल्स स्वैप करता है
static void Swap<T>(ref T lhs, ref T rhs) {
T temp = lhs;
lhs = rhs;
rhs = temp;
}
static void Main() {
// int के साथ
int a = 45, b = 60;
Console.WriteLine($"Before swap: a={a}, b={b}");
Swap(ref a, ref b);
Console.WriteLine($"After swap: a={a}, b={b}");
// char के साथ
char c = 'K', d = 'P';
Console.WriteLine($"\nBefore swap: c={c}, d={d}");
Swap(ref c, ref d);
Console.WriteLine($"After swap: c={c}, d={d}");
// string के साथ (रेफरेंस टाइप)
string s1 = "Hello", s2 = "World";
Console.WriteLine($"\nBefore swap: s1={s1}, s2={s2}");
Swap(ref s1, ref s2);
Console.WriteLine($"After swap: s1={s1}, s2={s2}");
}
}
आउटपुट
Before swap: a=45, b=60 After swap: a=60, b=45 Before swap: c=K, d=P After swap: c=P, d=K Before swap: s1=Hello, s2=World After swap: s1=World, s2=Hello
जेनेरिक मेथड्स के प्रकार
- टाइप पैरामीटर मेथड सिग्नेचर में:
void Process<T>(T item) - कंस्ट्रेंट्स के साथ:
where T : IComparable,where T : new(),where T : class,where T : struct,where T : BaseClass - एकाधिक टाइप पैरामीटर्स:
void Map<TIn, TOut>(TIn input, Func<TIn, TOut> selector)
जेनेरिक मेथड vs नॉन-जेनेरिक ओवरलोड्स
| पहलू | जेनेरिक मेथड | ओवरलोड्स |
|---|---|---|
| कोड डुप्लिकेशन | नहीं | हां (हर टाइप के लिए अलग मेथड) |
| टाइप सेफ्टी | कंपाइल-टाइम | कंपाइल-टाइम |
| वैल्यू टाइप्स के लिए बॉक्सिंग | नहीं | नहीं (अगर सही सिग्नेचर) |
| रखरखाव | आसान | कठिन (बदलाव हर जगह) |
उपयोग के मामले
- सामान्य एल्गोरिदम: सॉर्टिंग, सर्चिंग, स्वैपिंग, क्लोनिंग।
- फैक्ट्री मेथड्स:
T Create<T>() where T : new() - एक्सटेंशन मेथड्स:
public static TResult Map<T, TResult>(this T source, ...)