2008-09-30 14 views
18

इस कोड चलाने के बिना, की पहचान जो Foo विधि बुलाया जाएगा:सी # संभावित साक्षात्कार प्रश्न ... बहुत मुश्किल है?

class A 
{ 
    public void Foo(int n) 
    { 
     Console.WriteLine("A::Foo"); 
    } 
} 

class B : A 
{ 
    /* note that A::Foo and B::Foo are not related at all */ 
    public void Foo(double n) 
    { 
     Console.WriteLine("B::Foo"); 
    } 
} 

static void Main(string[] args) 
{ 
    B b = new B(); 
    /* which Foo is chosen? */ 
    b.Foo(5); 
} 

जो विधि? और क्यों? कोड चलाकर कोई धोखाधड़ी नहीं।

मुझे यह पहेली वेब पर मिली; मुझे यह पसंद है और मुझे लगता है कि मैं इसे एक साक्षात्कार प्रश्न के रूप में उपयोग करने जा रहा हूं ... राय?

संपादित करें: मैं इस गलत होने पर उम्मीदवार का न्याय नहीं करता, मैं इसे सी # और सीएलआर के बारे में पूर्ण चर्चा खोलने के तरीके के रूप में उपयोग करता हूं, इसलिए मुझे उम्मीदवारों की क्षमताओं की अच्छी समझ मिल सकती है।

स्रोत:http://netpl.blogspot.com/2008/06/c-puzzle-no8-beginner.html

+33

अगर कोई मुझसे पूछता है, तो मैं कहूंगा कि आपको कक्षा में मुख्य विधि लिखी जानी चाहिए :)) –

+0

क्या कोई समझा सकता है, जब हम int से डबल तक पैरामीटर के प्रकार को बदलते हैं तो यह बेस क्लास विधि क्यों कॉल करता है (एएफयू) और डबल टू इंट (बीएफयू) और डबल इनपुट के रूप में पास? –

उत्तर

7

Console.WriteLine ("बी :: फू");

क्योंकि यह स्वचालित रूप से आगे बढ़ेगा और विरासत में आगे जाने के बिना पहले उपयोग करेगा।

मुझे नहीं लगता कि यह एक अच्छा साक्षात्कार प्रश्न है लेकिन कोड को संकलित किए बिना हल करने का प्रयास करना मजाकिया हो सकता है।

+0

केवल अगर यह परिशुद्धता खोने के बिना डाला जा सकता है, जैसे int -> double, अगर उन्हें उलट दिया गया है, तो यह मूल विधि को कॉल करेगा। – FlySwat

+0

आप सही हैं। उदाहरण 5 के साथ है इसलिए परिशुद्धता में कुछ भी नहीं खो गया है :) –

+0

मेरे अंदर सीएस गीक रो रहा है। जब आप int-> डबल रूपांतरित करते हैं तो आप * सटीकता खो देते हैं। एक डबल वास्तव में एक पूर्णांक का प्रतिनिधित्व नहीं करता है, यदि आप लगातार 10 से दोगुना गुणा करना चाहते हैं तो अंत में आप त्रुटियों को रेंगते हैं। – tloach

55

मैं वास्तव में इसे एक साक्षात्कार प्रश्न के रूप में उपयोग नहीं करता। मुझे इसके पीछे जवाब और तर्क पता है, लेकिन इस तरह कुछ ऐसा शायद ही कभी आना चाहिए कि यह कोई समस्या नहीं होनी चाहिए। उत्तर को जानना वास्तव में कोड की उम्मीदवार की क्षमता के बारे में ज्यादा नहीं दिखाता है।

ध्यान दें कि अगर आप वर्चुअल हैं और बी इसे ओवरराइड करते हैं तो भी आपको वही व्यवहार मिल जाएगा।

यदि आपको सी # पहेली और विषमताएं हैं, I've got a few too (including this one)

+0

मैंने देखा कि वहां एक जवाब है जो साक्षात्कारकर्ताओं को गलत कारणों से सही प्रश्न पूछने की समस्या पेश करता है। मैंने प्रस्तावित किया कि डिज़ाइन प्रश्नों को सामान्य ज्ञान से अधिक केंद्रित होना चाहिए। आप हमेशा एक कंपाइलर समस्या पढ़ सकते हैं, या एक बग आउट आउट कर सकते हैं, लेकिन खराब डिज़ाइन को ठीक करने में काफी समय लगता है। (बस इन्हें लाओ, क्योंकि वे इस जवाब को बढ़ाते हैं और कीचड़ में खो जाते हैं)। –

+0

यही कारण है कि असंबद्ध प्रकारों का निहित कास्टिंग बेकार है :) – mayu

+0

एक पुराना सवाल है लेकिन एक भाग से भ्रमित हो गया है, जब हम int से डबल (एएफयू) और डबल से int तक पैरामीटर का प्रकार बदलते हैं तो यह बेस क्लास विधि क्यों कॉल करता है (बीएफयू) और इनपुट को डबल (बी। फू (5.8)) पास करें? –

9

इसका उपयोग करने के खिलाफ एक और वोट, लेकिन एक अलग कारण के लिए।

जब इस तरह की जगह पर डाल दिया जाता है, तो बहुत सारे अच्छे प्रोग्रामर गलत जवाब के साथ आते हैं, लेकिन इसलिए नहीं कि वे अवधारणाओं को नहीं जानते हैं या इसे समझ नहीं सकते हैं। क्या होता है कि वे इस तरह कुछ देखेंगे और सोचेंगे, "आह, चाल प्रश्न!", और उसके बाद प्रतिक्रिया में खुद को सोचने के लिए आगे बढ़ें। यह एक साक्षात्कार सेटिंग में विशेष रूप से सच है जहां उन्हें आईडीई या Google का लाभ नहीं होता है या अन्य किसी अन्य प्रोग्रामर को उनके दिन-प्रतिदिन प्रोग्रामिंग में अनुमोदित करने में मदद मिलती है।

26

बहुत मुश्किल है? नहीं, लेकिन सवाल में आपका लक्ष्य क्या है? आप अपने साक्षात्कारकर्ता से क्या उम्मीद कर रहे हैं? कि वे इस विशेष वाक्य रचनात्मक quirk पता है? इसका मतलब है कि उन्होंने spec/language अच्छी तरह से अध्ययन किया है (उनके लिए अच्छा) या वे इस समस्या में भाग गए हैं (उम्मीद है कि उन्होंने जो लिखा है उससे नहीं, लेकिन अगर उन्होंने किया - यिक्स)। कोई भी मामला वास्तव में इंगित करता है कि आपके हाथ पर एक ठोस प्रोग्रामर/इंजीनियर/वास्तुकार है। मेरा मानना ​​है कि सवाल महत्वपूर्ण नहीं है लेकिन सवाल के आसपास चर्चा है।

जब मैं उम्मीदवारों से मुलाकात करता हूं, तो मैं आमतौर पर एक भ्रामक सरल प्रश्न पूछता हूं जो एक भाषा अर्थपूर्ण क्विर्क पर आधारित है - लेकिन मुझे परवाह नहीं है कि मेरा साक्षात्कारकर्ता इसे जानता है क्योंकि वह अर्थपूर्ण क्विर्क मुझे कई रास्ते खोलने की अनुमति देता है मुझे यह पता लगाने की अनुमति दें कि क्या मेरा उम्मीदवार विधिवत है, उनकी संचार शैली, अगर वे "मुझे नहीं पता" कहने के इच्छुक हैं, तो क्या वे अपने पैरों पर सोचने में सक्षम हैं, क्या वे भाषा डिजाइन और मशीन आर्किटेक्चर को समझते हैं, क्या वे प्लेटफार्म और पोर्टेबिलिटी मुद्दों को समझें - संक्षेप में, मैं बहुत सारी सामग्री ढूंढ रहा हूं जो सभी "इसे प्राप्त करते हैं?" में जोड़ते हैं। इस प्रक्रिया में एक घंटे या अधिक समय लगता है।

अंत में, मुझे वास्तव में परवाह नहीं है कि वे मेरे प्रश्न का उत्तर जानते हैं - सवाल यह है कि मुझे बिना किसी पूछे जाने पर अप्रत्यक्ष रूप से उस सारी जानकारी को अप्रत्यक्ष रूप से प्राप्त करने दें। यदि आपके पास इस प्रश्न में कोई मूल्यवान मामूली नहीं है, तो इसे भी पूछने से परेशान न करें - आप अपना समय और उम्मीदवार का समय बर्बाद कर रहे हैं।

+2

सर्वश्रेष्ठ साक्षात्कारकर्ता ने मुझे सी # प्रश्नों पर कुछ घंटों के लिए पूछताछ की है कि मुझे पता नहीं है कि मुझे सी # पता नहीं है (लेकिन मुझे जावा और सी ++ पता है)। मुझे सबसे अधिक संभावित उत्तर – tloach

12

जोएल के साथ और अधिक सहमत नहीं हो सका। मेरे पास 20+ साल का अनुभव डिज़ाइन और कोडिंग है, और पहली बात मैंने सोचा था जब मैंने देखा था: यह संकलित भी नहीं होगा।

मैंने यह धारणा बनाई क्योंकि मैं केवल एक ही डेटाटाइप से भिन्न ओवरलोड से बचने की कोशिश करता हूं, और कोड को देखने में int/double अंतर भी नहीं उठाया जाता है; मुझे लगता है कि बी

में एक पुनर्वितरण की अनुमति देने के लिए एक नया ऑपरेटर होने की आवश्यकता है। वास्तव में मैंने पुस्तकालय का उपयोग एक पाठ प्रोग्रामर को कुछ पाठ फ़ाइल पीढ़ी को संभालने के लिए बनाया था जो थोड़ा उलझन में था क्योंकि विधियों में से एक था 8 अलग-अलग अधिभार और उनमें से दो अंतिम तर्क पर डेटाटाइप द्वारा भिन्न थे। एक स्ट्रिंग था और एक char था। संभावना है कि पैरामीटर के स्ट्रिंग संस्करण के लिए आवश्यक मूल्य एक वर्ण लंबा था, इसलिए उम्मीद है कि आप देख सकते हैं कि यह कहां जा रहा है। हमारे पास एक समय के शैतान की समस्याओं का शैतान था क्योंकि लाइब्रेरी के उपभोक्ता ने अनजाने में गलत कॉल को ट्रिगर किया क्योंकि मतभेदों को उद्धृत करने के लिए, एकल बनाम डबल।

कहानी का नैतिक, आभारी रहें कि उम्मीदवार को जवाब नहीं पता है क्योंकि यह अच्छी कोडिंग आदतों को इंगित कर सकता है।

+1

का कारण बनने की मेरी क्षमता के आधार पर एक प्रस्ताव मिला है ऐसा लगता है कि आप अपने डिज़ाइन में बहुत अधिक विरासत नहीं लेते हैं। पैरामीटर प्रकार से भिन्न होने वाले समान नाम के ओवरलोडिंग विधियां असामान्य नहीं हैं। – mmcdole

+0

मैं भी, बिल की तरह ही, एक प्रोग्रामर पसंद करता हूं जो कहता है, "मैंने कभी ऐसे मामले पर कभी ठोकर नहीं लगाया" जो तुरंत जवाब जान लेगा। –

+0

सिमुकल, हम विरासत का एक बड़ा सौदा करते हैं। मुझे यकीन नहीं है कि विधि ओवरलोडिंग को अतिक्रमण का एक हॉलमार्क क्यों माना जाएगा। हो सकता है कि आप ऑपरेटर अधिभारों के लिए अधिक संदर्भ दे रहे हों और विधि अधिभार नहीं, जिसे हम बहुत अधिक करते हैं और ऑपरेटर कीवर्ड के साथ कोड में अधिक स्पष्ट रूप से पहचानने योग्य होते हैं। – Bill

2

यह मेरे लिए एक चाल प्रश्न का smacks। यदि आप लंबे समय तक भाषा का उपयोग कर रहे हैं, तो शायद आप समस्या में भाग लेते हैं और जवाब जानते हैं; लेकिन कितना समय लंबा है?

यह भी एक प्रश्न है जहां आपकी पृष्ठभूमि आपके खिलाफ काम कर सकती है। मुझे सी ++ में पता है कि बी में परिभाषा ए में परिभाषा को छिपाएगी, लेकिन मुझे नहीं पता कि यह सी # में समान काम करता है। वास्तविक जीवन में, मुझे पता होगा कि यह एक संदिग्ध क्षेत्र था और इसे देखने का प्रयास करें। एक साक्षात्कार में मैं अनुमान लगाने की कोशिश कर सकता हूं, जगह पर रखा गया है। और मुझे शायद यह गलत लगेगा।

+0

वास्तविक जीवन में मैं इसे आज़माउंगा और देखें कि क्या हुआ;) – tloach

2

इसे तब तक एक प्रश्न के रूप में उपयोग करें जब तक कि आप उम्मीदवार से आपकी विचार प्रक्रियाओं को बताने की अपेक्षा करते हैं क्योंकि वह बताता है कि वह क्या सोच रहा है। वास्तविक प्रश्न में वास्तविक कोड की सही और गलतता की परवाह कौन करता है - वास्तविक दुनिया में, उम्मीदवार को इस तरह का कोड मिल जाएगा, यह काम नहीं करेगा और इसे डीबगर और लेखन रेखा के संयोजन के साथ डीबग करेगा, इसलिए यदि आप चाहें तो यह बेकार सवाल है उम्मीदवार जो सही जवाब जानते हैं (या अनुमान लगाते हैं)।

लेकिन जो लोग सोच सकते हैं कि वे क्या सोचेंगे, यह एक अलग मामला है। अगर उन्हें गलत लगता है तो भी उन्हें किराए पर लें।

3

मुझे लगता है कि यह एक भयानक सवाल है। मुझे लगता है कि कोई सवाल एक भयानक सवाल है जब वास्तविक जवाब "इसे चलाएं और देखें!"

यदि मुझे वास्तविक जीवन में यह जानने की ज़रूरत है, तो वही है जो मैं करता हूं: एक परीक्षण प्रोजेक्ट बनाएं, इसमें कुंजी करें और पता लगाएं। तो मुझे सी # spec में अमूर्त तर्क या बेहतर बिंदुओं के बारे में चिंता करने की ज़रूरत नहीं है।

बस आज मैं इस तरह के एक प्रश्न में भाग गया: यदि मैं एक ही पंक्ति के साथ दो बार टाइप किए गए डेटाटेबल को भरता हूं, तो क्या होगा? पंक्ति की एक प्रति, या दो? और क्या यह पहली पंक्ति को ओवरराइट करेगा भले ही मैंने इसे बदल दिया हो? मैंने किसी से पूछने के बारे में सोचा, लेकिन मुझे एहसास हुआ कि मैं आसानी से एक टेस्ट प्रोजेक्ट को फायर कर सकता हूं जो पहले से ही डेटासेट्स का इस्तेमाल करता था, एक छोटी सी विधि लिखता था, और इसका परीक्षण करता था।

उत्तर:

...आह, लेकिन अगर मैं आपको बताता हूं, तो आप इस बिंदु को याद करेंगे। :) मुद्दा यह है कि, प्रोग्रामिंग में आपको इन चीजों को hypotheticals के रूप में नहीं छोड़ना पड़ता है, और नहीं होना चाहिए यदि उन्हें उचित रूप से परीक्षण किया जा सके।

तो मुझे लगता है कि यह एक भयानक सवाल है। क्या आप ऐसे डेवलपर को किराए पर लेना पसंद नहीं करेंगे जो इसे आजमाएगा और फिर पता चलता है कि डेवलपर की बजाय, जो उसे अपनी लुप्तप्राय स्मृति से डूबने का प्रयास करेगा, या जो किसी और से पूछेगा और स्वीकार करेगा जवाब है कि गलत हो सकता है?

+0

मुझे नहीं लगता कि "इसे चलाएं और देखें" यह सब कुछ है। कोड स्निपेट मौजूद हैं जो अलग-अलग कंपाइलर/रनटाइम संस्करणों पर अलग-अलग परिणाम देते हैं (हालांकि यह उनमें से एक नहीं है)। "यह मेरी मशीन पर काम करता है" यह एक आदर्श स्थिति नहीं है जब मेरा कोड लाइन के नीचे विफल हो जाए। –

+0

मेरा सामान्य दृष्टिकोण यह देखने के लिए सबसे पहले होगा कि मुझे क्या मिलता है, और उसके बाद उस ज्ञान के साथ विनिर्देश की जांच करने के लिए यह देखने के लिए कि मुझे जो मिला वह हमेशा होने की गारंटी है। –

+1

और फिर भी ... आप उन अन्य कंपाइलरों या संस्करणों पर "इसे चलाएं और देखें" भी कर सकते हैं! और यदि "यह मेरी मशीन पर काम करता है" पर्याप्त नहीं है, तो जाहिर है क्योंकि जब आप किसी और की मशीन पर इसे चलाते हैं और देखते हैं, तो यह काम नहीं करता है। आखिरकार वास्तविक दुनिया परीक्षण हमेशा सिद्धांत को ट्रम्प करेगा। –

5

यह वास्तव में एक चाल सवाल है।

उत्तर "क्या होना चाहिए" के रूप में अस्पष्ट है। निश्चित रूप से, सी # कंपाइलर इसे ठोस के अस्पष्टता के दायरे से बाहर ले जाता है; हालांकि, चूंकि ये विधियां एक-दूसरे को ओवरलोड कर रही हैं, और न तो ओवरराइडिंग और न ही छायांकन कर रही हैं, यह मानना ​​उचित है कि "सर्वश्रेष्ठ तर्क फिट" यहां लागू होना चाहिए, और इसलिए निष्कर्ष निकालना है कि यह ए :: फू (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 (पूर्णांक एन) संस्करण वास्तव में नहीं कहा जा सकता (पहले स्पष्ट रूप से कक्षा ए को कास्टिंग के बिना नहीं)। नतीजा यह है कि सी # आईडीई वास्तव में सी # कंपाइलर के साथ सिंक में नहीं है।

यह देखने का एक और तरीका यह है कि सी # कंपाइलर एक इच्छित अधिभार ले रहा है और इसे एक छायांकित विधि में बदल रहा है। (यह मेरे लिए सही विकल्प प्रतीत नहीं होता है, लेकिन यह स्पष्ट रूप से सिर्फ एक राय है।)

एक साक्षात्कार प्रश्न के रूप में, मुझे लगता है कि यदि आप मुद्दों के बारे में चर्चा करने में रुचि रखते हैं तो यह ठीक हो सकता है यहाँ। इसे "सही" या "गलत" प्राप्त करने के लिए, मुझे लगता है कि गलत कारणों से सवाल एक चाल प्रश्न पर आसानी से याद किया जा सकता है, या यहां तक ​​कि सही हो सकता है। असल में, "होना चाहिए" सवाल का जवाब वास्तव में बहुत ही बहस योग्य है।

+1

+1 गलत कारणों से इसे ठीक करने के लिए +1। यही कारण है कि मामूली बात इतनी खराब है। आपको एक बेवकूफ मिलता है जो कागज पर अच्छा दिखता है। डिजाइन प्रश्न पूछने के लिए बेहतर है। –

3

यह पूछने के लिए एक हास्यास्पद सवाल है - मैं स्निपेट कंपाइलर के साथ < 60 सेकंड में इसका उत्तर दे सकता हूं, और यदि मैंने कभी भी कोड आधार पर काम किया है जो कार्यक्षमता पर निर्भर करता है - इसे जल्दी से अस्तित्व से बाहर कर दिया जाएगा।

सबसे अच्छा जवाब यह है कि "यह एक बेवकूफ डिज़ाइन है, ऐसा न करें और आपको यह जानने के लिए भाषा का पता लगाने की आवश्यकता नहीं होगी कि यह क्या करने जा रहा है"।

यदि मैं साक्षात्कारकर्ता था, तो मैं आपके गीक ट्रिविया क्रेडिट का बहुत अधिक सोचता हूं, और शायद आपको गीक ट्रिविअल पर्स्यूट के अगले गेम में आमंत्रित करता हूं। लेकिन, मुझे यकीन नहीं है कि मैं आपके साथ/साथ काम करना चाहता हूं। यदि यह आपका लक्ष्य है, तो हर तरह से पूछें।

  • ध्यान दें कि एक अनौपचारिक स्थिति में, इस तरह की गीक ट्रिविया मजेदार और मनोरंजक हो सकती है। लेकिन, एक साक्षात्कारकर्ता के लिए, एक साक्षात्कार मजेदार या अनौपचारिक है लेकिन यह छोटे प्रश्नों के साथ क्यों आगे बढ़ता है कि साक्षात्कारकर्ता को यह नहीं पता कि आप गंभीरता से हैं या नहीं?
+0

तो आपका जवाब मूल रूप से है कि इससे कोई फर्क नहीं पड़ता कि कोई जानता है कि उनकी प्रोग्रामिंग भाषा कैसे काम करती है? – BobbyShaftoe

+1

@ बॉबी - चरम किनारों पर? हाँ, मैं कहूंगा कि यह वास्तव में कोई फर्क नहीं पड़ता। मैं बहुत अधिक चाहता हूं जो एक स्पेक गीक की तुलना में तर्क दे सकता है। –

+0

@ बॉबी शाफ्टो अच्छे प्रोग्रामर एक भाषा के idiosyncrasies सीख सकते हैं। आपके पास साक्षात्कार में एक्स टाइम है। इस बात पर ध्यान देना सबसे अच्छा है कि क्या आपके पास एक ऐसे प्रोग्रामर के बजाय एक अच्छा प्रोग्रामर है, जो संकलित मुद्दों को हल कर सकता है। मैं बल्कि एक लड़के के बजाय एक घर के लिए एक अच्छी डिजाइन के साथ आना चाहूंगा जो एक ऐसे व्यक्ति के बजाय गलती से गलत पेंच का चयन नहीं करेगा, और एक अनुपयोगी घर का निर्माण करेगा। –

5

एक साक्षात्कार प्रश्न के रूप में वास्तव में उचित नहीं है, क्योंकि यह एक चाल सवाल है। एक साक्षात्कारकर्ता से जो अच्छा जवाब मैं चाहता हूं वह की लाइनों के साथ अधिक होगा "इसे रीफैक्टरिंग की आवश्यकता है"

जब तक कि आप किसी को कंपाइलर्स पर काम करने के लिए किराए पर नहीं लेना चाहते हैं, मुझे यकीन नहीं है कि आपको सीएलआर में गहराई से जाना होगा।

साक्षात्कार के प्रश्नों के लिए मैं उन चीज़ों की तलाश करता हूं जो उनके जवाब में कोडर के समझ के स्तर को दिखाते हैं। यह एक विषमता/पहेली से अधिक है।

+0

आपका सबसे अच्छा जवाब है। जब इस तरह के एक प्रश्न का सामना करना पड़ता है तो मैं एक जवाब खोजने की कोशिश करता हूं लेकिन आखिर में मेरी राय व्यक्त करता हूं कि कोड में ऐसे पहेली रखने और किसी अन्य समाधान का चयन करने का एक बुरा अभ्यास है। –

0

एक ऐसी ही नमूना नीचे दिए गए कोशिश:

class Program 
{ 
    class P 
    {} 
    class Q : P 
    {} 

    class A 
    { 
     public void Fee(Q q) 
     { 
      Console.WriteLine("A::Fee"); 
     } 
    } 

    class B : A 
    { 
     public void Fee(P p) 
     { 
      Console.WriteLine("B::Fee"); 
     } 
    } 

    static void Main(string[] args) 
    { 
     B b = new B(); 
     /* which Fee is chosen? */ 

     b.Fee(new Q()); 
     Console.ReadKey(); 
    } 
} 

संकलक "b.Fee()" एक उपलब्ध बजाय एक विरासत विधि प्रकार की विधि के लिए कॉल (एक आधार की विधि को जोड़ने पसंद करने लगता है टाइप करें) यदि पैरामीटर को किसी भी विधि से मिलान करने के लिए निहित रूप से डाला जा सकता है। अर्थात। पैरामीटर की निहित कास्टिंग बेस क्लास विधि लिंकिंग पर प्राथमिकता लेती है।

हालांकि ईमानदारी से मुझे विपरीत के रूप में विपरीत लगता है, क्योंकि मेरे लिए विरासत विधि सीधे शुरू की गई विधि के समान ही अच्छी है।

0

प्रश्न में दिए गए कोड B::Foo प्रिंट करेंगे।

+2

यदि आप इस विशेष विधि के बारे में बताएंगे * क्यों * के बारे में आपके संदेह शामिल हैं तो आपका उत्तर अधिक मूल्यवान होगा। – andr

2

वास्तविक कार्य स्थिति में सभी 5 सेकंड लगते हैं ताकि यह पता चल सके कि क्या गलत हुआ। संकलन, परीक्षण, ओह।

यदि कोई अच्छा और रखरखाव कोड बना सकता है तो मैं इससे अधिक चिंतित हूं।

  • इस प्रश्न के लिए आप कैसे डिजाइन करेंगे, सरल अमूर्त डिज़ाइन, कोई कोड लिखें।
  • यहां एक ऑब्जेक्ट डिज़ाइन है। ग्राहक आया और कहा कि वे यह चाहते थे। एक नई डिज़ाइन तैयार करें- या चर्चा के कारणों से क्यों आवश्यकताएं वास्तविक ग्राहक आवश्यकताओं को पूरा नहीं करती हैं।
0

जैसा कि मैंने किसी से साक्षात्कार किया है, मैं यह जानना चाहता हूं कि क्या उम्मीदवार संचार करने में सक्षम है, कोड लिखने में सक्षम है, जो समझ में आता है और इसे दूसरों द्वारा आसानी से समझा जा सकता है, कोड जिसे बनाए रखा जा सकता है इत्यादि। मैं व्यक्तिगत रूप से प्रस्तावित अभ्यासों में समय बिताना पसंद नहीं करता हूं। इसके बजाए मैं एक अभ्यास देना चाहूंगा जहां उम्मीदवार खुद को कोड लिखेंगे - यहां तक ​​कि एक नियमित पाठ संपादक में - और कोड समीक्षा के आधार पर एक चर्चा खोलने से, सुधार भी आगे बढ़ते हैं। संकलन करने के लिए कोड की आवश्यकता नहीं है: अंततः कंपाइलर अपना काम करेगा। मुझे पता है कि बहुत से लोग इस दृष्टिकोण से असहमत हो सकते हैं, लेकिन अब तक मुझे अच्छे उम्मीदवारों को खोजने का यह सबसे अच्छा तरीका मिल गया है।

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