2013-04-09 9 views
12

मैं क्यों यह काम कर रहा है समझ में नहीं आता ...असंभव जादू - यह वैध कथन क्यों है?

class Program 
{ 
    static void Main(string[] args) 
    { 
     IComparable.Equals(12, 3); 
    } 
} 

आईएल कोड:

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 
    // Code size  21 (0x15) 
    .maxstack 8 
    IL_0000: nop 
    IL_0001: ldc.i4.s 12 
    IL_0003: box  [mscorlib]System.Int32 
    IL_0008: ldc.i4.3 
    IL_0009: box  [mscorlib]System.Int32 
    IL_000e: call  bool [mscorlib]System.Object::Equals(object, 
                 object) 
    IL_0013: pop 
    IL_0014: ret 
} // end of method Program::Main 

यह Object.Equals (वस्तु, वस्तु) bool करने के लिए संकलित, लेकिन क्यों?

+1

वाह, जिसने मुझे एक सेकंड के लिए अच्छा लगाया। ध्यान दें कि यह * किसी भी * (कक्षा, enum और) इंटरफेस के साथ काम करता है, और किसी भी पैरामीटर प्रकार के लिए - निश्चित रूप से (एक बार जब आप इसके बारे में सोचते हैं)। –

+0

वास्तव में सभी इंटरफेस के साथ काम करता है, लेकिन इसके पीछे क्या कारण है? – boli

+0

अच्छी तरह से डेविड का जवाब देखें। –

उत्तर

12

यह bool Object.Equals(Object,Object) पर संकलित करता है, लेकिन क्यों?

"क्यों?" प्रश्न अपरिचित और उत्तर देने में मुश्किल हैं, इसलिए इसके बजाय मैं एक "क्या?" का जवाब दूंगा सवाल।

सी # विनिर्देश का कौन सा अनुभाग इस अजीब व्यवहार की वैधता को औचित्य देता है?

सी # विनिर्देश की धारा 7.4 का कहना है कि जब आप प्रपत्र T.N

के एक सदस्य देखने कर रहे हैं ... सेट विरासत में मिला सदस्यों सहित टी में एन नामित सभी सुलभ सदस्यों, के होते हैं और वस्तु में एन नामित सुलभ सदस्यों ... [जोर जोड़ा]

object.Equalsमें Equals नामक एक सुलभ सदस्य है 210, तो यह एक उम्मीदवार है।

+1

इसे इस तरह से डिजाइन करने के लिए क्यों डिजाइन किया गया था बल्कि सब कुछ बनाने के लिए अंतिम पूर्वज के रूप में 'वस्तु' है? और ऐसा लगता है कि मुझे अपना जवाब हटाने की आवश्यकता होगी ....... –

+1

उत्सुकता से, PowerShell इसकी अनुमति नहीं देता है। उदाहरण के लिए PowerShell '[DayOfWeek] :: बराबर (12, 3) 'ठीक काम करता है, लेकिन' [IDisposable] :: बराबर (12, 3)' शिकायत करता है कि विधि मौजूद नहीं है। –

+0

उत्तर के लिए धन्यवाद, कम से कम एक बार सी # विनिर्देश पढ़ने के लिए समय लगेगा। – boli

संबंधित मुद्दे