Method Overloading in C# – किसी भी Programming Language में एक ही नाम के एक से ज्यादा Methods नहीं हो सकते और यही बात C# Programming Language पर भी Apply होती है। लेकिन C++ व Java की तरह ही C# भी Method के Signature पर आधारित होते हैं, न कि केवल Method के नाम पर।
इसलिए C# में हम एक ही नाम के एक से ज्यादा Methods Define कर सकते हैं और जब हम C# में एक ही नाम के एक से ज्यादा Methods को Define करते हैं, तब Method को Call करते समय हम उसमें जो Parameters Specify करते हैं, उन Parameters की संख्या, Parameters के Data Type, Parameters के Modifiers व Parameters के क्रम के आधार पर C# Compiler Program के Compile Time में इस बात को तय करता है कि उसे समान नाम के कई Methods में से किस Best Matching Method को Call करना है।
चूंकि C# Compiler को Parameters के आधार पर Program के Compile Time में Best Matching Method को Call करने हेतु Best Matching Method को Search करने का Extra Load पडता है, इसलिए Compiler द्वारा Best Matching Method को Search करने की इस प्रक्रिया को C# में Method Overloading कहा जाता है। Method Overloading का प्रयोग तब किया जाता है जब Objects को एक ही तरह के काम करने होते हैं लेकिन Input Parameters अलग-अलग प्रकार के होते हैं।
Method Overloading में एक ही नाम के बहुत सारे Methods होने के बावजूद सभी का Signature अलग-अलग होता है और इस Signature के आधार पर ही C# Compiler Best Matching Method को Call करता है। इस प्रक्रिया को हम एक उदाहरण द्वारा आसानी से समझ सकते हैं:
// File Name: MethodOverloading.cs using System; namespace CSharpIntermediateConstructsMethod { class MethodOverloading { private static void Main(string[] args) { Console.WriteLine("Signature Addition_int_int for 10+20: {0}", Addition(10, 20)); Console.WriteLine("Signature Addition_int_int_int for 10+20+30: {0}",Addition(10,20,30)); Console.WriteLine("Signature Addition_int_float for 10+20.0f: {0}", Addition(10, 20.3f)); Console.WriteLine("Signature Addition_float_int for 10.5f+20: {0}", Addition(10.5f, 20)); Console.WriteLine("Signature Addition_float_float for 10.5f+20.3f: {0}",Addition(10.5f,20.3f)); //Console.WriteLine("Signature Addition_float_float_float for 1.5f+2.3f+1.0f: {0}", Addition(1.5f, 2.3f,1.0)); } static int Addition(int x, int y) { return x + y; } static int Addition(int x, int y, int z) { return x + y + z; } static float Addition(int x, float y) { return x + y; } static float Addition(float x, int y) { return x + y; } static float Addition(float x, float y) { return x + y; } } } // Output: Signature Addition_int_int for 10+20: 30 Signature Addition_int_int_int for 10+20+30: 60 Signature Addition_int_float for 10+20.0f: 30.3 Signature Addition_float_int for 10.5f+20: 30.5 Signature Addition_float_float for 10.5f+20.3f: 30.8
इस Program में हमने Addition() नाम के कई Method Create किए हैं, लेकिन सभी का Signature अलग-अलग है। इसलिए इस Program का जब निम्नानुसार Statement Execute होता है:
Console.WriteLine(“Signature Addition_int_int for 10+20: {0}”, Addition(10, 20));
तो क्योंकि इस Statement में हमने Addition() Method में दो Integer Type के Parameters को Specify किया है, इसलिए Program के Compile Time में दो Integer संख्याओं को जोडने के लिए C# Compiler निम्न Addition() Method को Call करता है, जो कि दो Integer Arguments को Accept करता है।
static int Addition(int x, int y) {
return x + y;
}
इसी तरह से जब इस Program का निम्नानुसार Statement Execute होता है, जिसमें पहला Argument एक Floating Point Value है, जबकि दूसरा Argument एक Integer Value है:
Console.WriteLine(“Signature Addition_float_int for 10.5f+20: {0}”, Addition(10.5f, 20));
तो Floating Point Value व Integer Value को आपस में जोडने के लिए C# Compiler निम्न Method को Call करता है, जिसमें पहला Parameter एक Floating Point Value Accept करता है जबकि दूसरा Parameter एक Integer Value Accept करता है:
static float Addition(float x, int y) {
return x + y;
}
जबकि निम्न Statement के Execute होने पर:
Console.WriteLine(“Signature Addition_int_int_int for 10+20+30: {0}”,Addition(10,20,30));
Compiler निम्न Addition() Method को Call करता है:
static int Addition(int x, int y, int z) {
return x + y + z;
}
क्योंकि तीन Integer Values को Accept करने के लिए इसी Method को Define किया गया है।
यानी हम Addition() Method में जिस तरह का Parameter Pass करते हैं, Compiler Specify किए गए Parameters के Type, Position व Number Of Parameters के आधार पर इस बात को Compile Time में तय करता है कि उसे किस Appropriate Signature वाले Method को Call करना है। इसी प्रक्रिया को Method Overloading कहते हैं।
जब हम Method Overloading Use करते हैं, तब हमें इस बात का ध्यान रखना होता है कि Method Signature के अन्तर्गत Method का Return Type कभी भी Participate नहीं करता। यानी:
static int Addition(int x, int y) {
return x + y;
}
static float Addition(int x, int y) {
return x + y;
}
यदि हम किसी Program में उपरोक्तानुसार दो Methods Define करें, जो कि दो Integer प्रकार के Arguments Accept करते हों, लेकिन Return Value के रूप में एक Method Integer Return करता हो, जबकि दूसरा Floating Point Value Return करता हो, तो C# Compiler इन दोनों Methods को अलग-अलग नहीं मानेगा, क्योंकि C# Compiler Return Value Type को Method Signature के रूप में Use नहीं करता।
इसलिए जब C# Compiler उपरोक्त दोनों Methods के Signature Create करेगा, तो वह निम्नानुसार समान Signature ही Create करेगा:
Addition_int_int //For First Method
Addition_int_int //For Second Method
परिणामस्वरूप Compiler को एक ही Program में एक ही Signature के दो Methods प्राप्त होंगे और Program Error Generate करेगा, क्योंकि एक ही Program में एक ही Signature के एक से ज्यादा Methods नहीं हो सकते।
Named Parameters
अभी तक हमने जितने भी Methods Create किए हैं, उन सभी में Parameters Pass करते समय हमें उसी क्रम का पालन करना जरूरी होता है, जिस क्रम में Define किया गया Called Method Parameters को Accept करता है। जैसे:
static float Addition(float x, int y) {
return x + y;
}
इस Method को Call करते समय जरूरी है कि पहला Parameter एक Floating Point Value हो जबकि दूसरा Parameter एक Integer हो। यानी:
Addition(10.5f, 10);
यदि हम इस Method को निम्नानुसार तरीके से Invoke करें, जहां पहला Parameter एक Integer जबकि दूसरा Parameter एक Floating Point Value हो:
Addition(10, 10.5f);
तो C# Compiler हमें Output के रूप में एक Error Message Return करता है। क्योंकि C# Compiler Type के मामले में काफी Strict है और Integer प्रकार का Parameter Integer Type के मान को ही Accept करता है, जबकि Floating Point Type का Parameter Floating Point Type के मान को ही Accept करता है। यानी हम Parameter के Type के क्रम को Change नहीं कर सकते।
लेकिन C# हमें Named Parameter नाम की एक ऐसी सुविधा Provide करता है, जिससे हम Method को Call करते समय किसी भी Order में Parameters को Specify कर सकते हैं। Named Parameters को समझने के लिए हम निम्नानुसार एक Program Create कर सकते हैं:
// File Name: NamedParameters.cs using System; namespace CSharpIntermediateConstructsMethod { class NamedParameters { private static void Main(string[] args) { Console.WriteLine("Signature Addition_int_float for 10+20.3f: {0}", Addition(y: 10, x: 20.3f)); Console.WriteLine("Signature Addition_float_int for 10.5f+20: {0}", Addition(10.5f, 20)); } static float Addition(float x, int y) { return x + y; } } } // Output: Signature Addition_int_int for 10+20.3: 30.3 Signature Addition_float_int for 10.5f+20: 30.5
इस Program में हमने Addition() नाम का जो Method Create किया है, वह पहले Argument के रूप में एक Floating Point Value व दूसरे Argument के रूप में एक Integer Value Accept करता है। लेकिन Main() Method में हमने पहली ही Line में Addition() Method को निम्नानुसार तरीके से Invoke किया है:
Console.WriteLine(“Signature Addition_int_float for 10+20.0f: {0}”, Addition(y: 10, x: 20.3f));
यानी हमने Method को Call करते समय ही बता दिया है कि y नाम के Parameter में Integer मान 10 Pass करना है व x नाम के Parameter में Floating Point मान 20.3 Pass करना है।
परिणामस्वरूप इस बार C# Compiler हमें किसी तरह का कोई Error Return नहीं करताए बल्कि Appropriate Output Return करता है। क्योंकि Parameter Pass करते समय हमने C# Compiler को Parameter का नाम Specify करते हुए Instruct कर दिया है कि कौनसा मान किस Parameter को Pass होगा।
जब हम C# Program में किसी Called Method में Pass किए जाने वाले Parameters के साथ उस Parameter के नाम को भी Specify कर देते हैं, जिसमें वह मान Store होना चाहिए, तो इस नाम Specify करते हुए Parameter Pass करने की व्यवस्था को Named Parameters कहते हैं।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF