C# में मेथड ओवरलोडिंग (Method Overloading)
मेथड ओवरलोडिंग एक ही नाम के कई मेथड्स को एक ही क्लास में परिभाषित करने की अनुमति देता है, बशर्ते उनके पैरामीटर लिस्ट अलग हों (संख्या, प्रकार, या क्रम)। रिटर्न टाइप अकेले ओवरलोडिंग के लिए पर्याप्त नहीं है।
ओवरलोडिंग के दो मुख्य तरीके
1. पैरामीटर्स के डेटा टाइप अलग हों
public void Print(int i) {
Console.WriteLine($"Integer: {i}");
}
public void Print(double d) {
Console.WriteLine($"Double: {d}");
}
public void Print(string s) {
Console.WriteLine($"String: {s}");
}
2. पैरामीटर्स की संख्या अलग हो
// 2 पैरामीटर्स
public static int Multiply(int a, int b) {
return a * b;
}
// 3 पैरामीटर्स
public static int Multiply(int a, int b, int c) {
return a * b * c;
}
// 4 पैरामीटर्स
public static int Multiply(int a, int b, int c, int d) {
return a * b * c * d;
}
पूर्ण उदाहरण
using System;
public class Calculator {
// टाइप-बेस्ड ओवरलोडिंग
public void Display(int value) => Console.WriteLine($"Int: {value}");
public void Display(double value) => Console.WriteLine($"Double: {value}");
public void Display(string value) => Console.WriteLine($"String: {value}");
// पैरामीटर-काउंट ओवरलोडिंग
public int Add(int a, int b) => a + b;
public int Add(int a, int b, int c) => a + b + c;
public int Add(int a, int b, int c, int d) => a + b + c + d;
}
class Program {
static void Main() {
Calculator calc = new Calculator();
calc.Display(42);
calc.Display(3.14);
calc.Display("Hello");
Console.WriteLine(calc.Add(10, 20));
Console.WriteLine(calc.Add(10, 20, 30));
Console.WriteLine(calc.Add(10, 20, 30, 40));
}
}
आउटपुट
Int: 42 Double: 3.14 String: Hello 30 60 100
अतिरिक्त ओवरलोडिंग नियम
- पैरामीटर क्रम:
void Foo(int a, string b)औरvoid Foo(string a, int b)अलग हैं। - ref/out/modifiers:
void M(ref int x)औरvoid M(out int x)ओवरलोड माने जाते हैं (लेकिनvoid M(int x)के साथ नहीं)। - पैरामीटर नाम: केवल नाम बदलना (
void M(int x)vsvoid M(int y)) ओवरलोडिंग नहीं है। - रिटर्न टाइप: केवल रिटर्न टाइप अलग होने से ओवरलोडिंग नहीं होती।
- जेनेरिक्स:
void M<T>(T x)औरvoid M(int x)ओवरलोड हो सकते हैं।
बेस्ट प्रैक्टिस
- संबंधित ऑपरेशन्स के लिए एक ही नाम उपयोग करें (पठनीयता)।
- डिफ़ॉल्ट पैरामीटर वैल्यूज (C# 4+) का उपयोग करके ओवरलोड्स कम करें:
void M(int a, int b = 0) paramsकीवर्ड के साथ सावधान रहें; यह ओवरलोड रिज़ॉल्यूशन को प्रभावित कर सकता है।