C# में मेथड ओवरलोडिंग
मेथड ओवरलोडिंग एक ही क्लास में **एक ही नाम के कई मेथड्स** को परिभाषित करने की अनुमति देता है, बशर्ते उनके **पैरामीटर लिस्ट अलग हों** (संख्या, टाइप, या क्रम)। रिटर्न टाइप अकेले ओवरलोडिंग के लिए पर्याप्त नहीं है।
ओवरलोडिंग के तरीके
- पैरामीटर्स की संख्या अलग हो
- पैरामीटर्स के डेटा टाइप अलग हों
- पैरामीटर्स का क्रम अलग हो (टाइप्स अलग होने पर)
- ref/out/in मोडिफायर अलग हों
उदाहरण: पैरामीटर काउंट ओवरलोडिंग (गुणा)
using System;
public class Calculator {
// 2 पैरामीटर्स
public static int Multiply(int a, int b) => a * b;
// 3 पैरामीटर्स
public static int Multiply(int a, int b, int c) => a * b * c;
// 4 पैरामीटर्स
public static int Multiply(int a, int b, int c, int d) => a * b * c * d;
}
class Program {
static void Main() {
Console.WriteLine($"2 nums: {Calculator.Multiply(10, 15)}"); // 150
Console.WriteLine($"3 nums: {Calculator.Multiply(8, 13, 20)}"); // 2080
Console.WriteLine($"4 nums: {Calculator.Multiply(3, 7, 10, 7)}"); // 1470
}
}
आउटपुट
2 nums: 150 3 nums: 2080 4 nums: 1470
उदाहरण: पैरामीटर टाइप ओवरलोडिंग
public void Display(int i) => Console.WriteLine($"Int: {i}");
public void Display(double d) => Console.WriteLine($"Double: {d}");
public void Display(string s) => Console.WriteLine($"String: {s}");
ओवरलोड रिज़ॉल्यूशन नियम
- सटीक मैच (इम्प्लिसिट कन्वर्जन के बिना)।
- इम्प्लिसिट कन्वर्जन के साथ मैच (
int → long → double)। - बॉक्सिंग के साथ मैच (
int → object)। - params एरे के साथ मैच (सबसे कम प्राथमिकता)।
डिफ़ॉल्ट पैरामीटर्स vs ओवरलोडिंग (C# 4+)
// ओवरलोडिंग के बजाय डिफ़ॉल्ट पैरामीटर्स
public void Connect(string server, int port = 80, bool ssl = false) { }
// कॉल
Connect("localhost");
Connect("localhost", 443);
Connect("localhost", 443, true);
सावधानियां
refऔरoutओवरलोडिंग के लिए अलग सिग्नेचर माने जाते हैं, लेकिनvoid M(int x)औरvoid M(ref int x)एक साथ नहीं हो सकते (कंपाइल एरर)।- जेनेरिक मेथड्स नॉन-जेनेरिक से अलग होते हैं:
void M<T>(T x)औरvoid M(int x)सह-अस्तित्व में रह सकते हैं। - नेम्ड आर्गुमेंट्स (C# 4+) ओवरलोड रिज़ॉल्यूशन को प्रभावित कर सकते हैं।