मैं कम से कम मेरे लिए एक कुरकुरा कुश्ती कर रहा हूं, विधि के ओवरलोडिंग रिज़ॉल्यूशन विधि।विधि अधिभार रिज़ॉल्यूशन अप्रत्याशित व्यवहार
class Program
{
static void Main(string[] args)
{
var test = new OverloadTest();
test.Execute(0);
test.Execute(1);
Console.ReadLine();
}
}
public class OverloadTest
{
public void Execute(object value)
{
Console.WriteLine("object overload: {0}", value);
}
public void Execute(MyEnum value)
{
Console.WriteLine("enum overload: {0}", value);
}
}
public enum MyEnum
{
First = 1, Second = 2, Third = 3
}
प्रिंट होगा:: मैं समस्या को ठीक करने के लिए एक छोटा सा नमूना लिखा है
enum overload: 0
object overload: 1
मूल रूप से अधिभार कहा जाता है मूल्य के आधार पर अलग है (0, 1) दिए गए डेटा प्रकार के बजाय ।
क्या कोई समझा सकता है?
अद्यतन
मैं वहाँ सी # 2 और सी # 3
Do((long)0) => object overload //C# 2
Do((long)0) => enum overload //C# 3
यह बहुत अजीब है। मैं उम्मीद करता था कि यह बिल्कुल संकलित न हो, क्योंकि निष्पादन के लिए दो अलग-अलग कॉल संदिग्ध हैं। 0 और 1 int हैं, और इसलिए यह वस्तु अधिभार के साथ-साथ MyEnum अधिभार को कॉल करने के लिए समान रूप से मान्य है। – Nick
मुझे यह नहीं पता था। किसी भी enum प्रकार के लिए 0 स्पष्ट रूप से परिवर्तनीय क्यों है? उदाहरण में, 0 मान्य मान नहीं है। अगर कुछ मेरी सोच की रेखा को समझ में नहीं आता है, तो इसका मतलब यह नहीं है कि (1 मिनट पहले संकेत दिया गया है);) – hackerhasid
@statichippo: यह कुछ मामलों में आसान है, जैसे कि बिटवाइज अंकगणित करने के बाद झंडे। @ निक: दोनों विधियां * लागू * हैं, लेकिन 0 से enum का रूपांतरण सी # spec के नियमों द्वारा ऑब्जेक्ट से ऑब्जेक्ट से "बेहतर" है ... यही कारण है कि अधिभार कहा जाता है। –