यह वास्तव में एक चाल सवाल है।
उत्तर "क्या होना चाहिए" के रूप में अस्पष्ट है। निश्चित रूप से, सी # कंपाइलर इसे ठोस के अस्पष्टता के दायरे से बाहर ले जाता है; हालांकि, चूंकि ये विधियां एक-दूसरे को ओवरलोड कर रही हैं, और न तो ओवरराइडिंग और न ही छायांकन कर रही हैं, यह मानना उचित है कि "सर्वश्रेष्ठ तर्क फिट" यहां लागू होना चाहिए, और इसलिए निष्कर्ष निकालना है कि यह ए :: फू (int n) है जो होना चाहिए जब एक तर्क के रूप में एक पूर्णांक प्रदान किया जाता है कहा जाता है।
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim b As New B
b.Foo(5) ' A::Foo
b.Foo(5.0) ' B::Foo
End Sub
End Class
Class A
Sub Foo(ByVal n As Integer)
MessageBox.Show("A::Foo")
End Sub
End Class
Class B
Inherits A
Overloads Sub Foo(ByVal n As Double)
MessageBox.Show("B::Foo")
End Sub
End Class
मुझे लगता है कि मैं सी # प्रोग्रामर के लिए अवसर खोल रहा हूँ:
साबित करने के लिए कि क्या हो "चाहिए" स्पष्ट नहीं है, ठीक उसी कोड जब VB.NET में चलाने के विपरीत परिणाम है सी # के अनुपालन के लिए वीबीएनईटी को "बाश" करने के लिए। लेकिन मुझे लगता है कि कोई एक बहुत मजबूत तर्क दे सकता है कि यह वीबी.नेट है जो उचित व्याख्या कर रहा है।
इसके अलावा, IntelliSense सी # आईडीई के भीतर पता चलता है वहाँ वर्ग बी के लिए दो भार के हैं कि (देखते हैं क्योंकि, या कम से कम होना चाहिए!), लेकिन B.Foo (पूर्णांक एन) संस्करण वास्तव में नहीं कहा जा सकता (पहले स्पष्ट रूप से कक्षा ए को कास्टिंग के बिना नहीं)। नतीजा यह है कि सी # आईडीई वास्तव में सी # कंपाइलर के साथ सिंक में नहीं है।
यह देखने का एक और तरीका यह है कि सी # कंपाइलर एक इच्छित अधिभार ले रहा है और इसे एक छायांकित विधि में बदल रहा है। (यह मेरे लिए सही विकल्प प्रतीत नहीं होता है, लेकिन यह स्पष्ट रूप से सिर्फ एक राय है।)
एक साक्षात्कार प्रश्न के रूप में, मुझे लगता है कि यदि आप मुद्दों के बारे में चर्चा करने में रुचि रखते हैं तो यह ठीक हो सकता है यहाँ। इसे "सही" या "गलत" प्राप्त करने के लिए, मुझे लगता है कि गलत कारणों से सवाल एक चाल प्रश्न पर आसानी से याद किया जा सकता है, या यहां तक कि सही हो सकता है। असल में, "होना चाहिए" सवाल का जवाब वास्तव में बहुत ही बहस योग्य है।
स्रोत
2008-10-01 00:55:13
अगर कोई मुझसे पूछता है, तो मैं कहूंगा कि आपको कक्षा में मुख्य विधि लिखी जानी चाहिए :)) –
क्या कोई समझा सकता है, जब हम int से डबल तक पैरामीटर के प्रकार को बदलते हैं तो यह बेस क्लास विधि क्यों कॉल करता है (एएफयू) और डबल टू इंट (बीएफयू) और डबल इनपुट के रूप में पास? –