2013-01-22 15 views
5

मैं हाल ही में इस तरह के तरीकों के साथ एक WinRT वर्ग परिभाषा था:WinRT में DefaultOverloadAttribute क्यों आवश्यक है?

public void Foo(string x){} 
public void Foo(CustomClass x){} 

संकलक एक त्रुटि फेंक दिया कि हालांकि

Earlz.FooBar का 1 पैरामीटर भार के ठीक एक विधि के रूप में निर्दिष्ट होना चाहिए विंडोज़ के साथ इसे सजाने के द्वारा डिफ़ॉल्ट अधिभार। फाउंडेशन। मेटाडाटा। डीफॉल्टऑवरलोडएट्रिब्यूट।

इस विशेषता के किस प्रकार के प्रभाव हैं? मैं WinRT अनुमानों के काम से अपरिचित हूं, लेकिन जो मैं लिख रहा हूं वह अंततः सार्वजनिक रूप से प्रयोग योग्य एपीआई होगा। इसलिए, मैं यह सुनिश्चित करना चाहता हूं कि मैं ऐसा कुछ नहीं कर रहा हूं जो एपीआई का उपयोग करने वाले लोगों को दर्द का कारण बन सके। क्या मुझे विधि FooCustom या कुछ ऐसे नामों का नाम बदलना चाहिए, या अधिक सामान्य रूप से उपयोग किए जाने वाले फ़ंक्शन पर डिफ़ॉल्ट ओवरलोड का उपयोग करना चाहिए?

इसके अलावा, मैं देख क्या इस विशेषता करता है की कोशिश की और यह क्यों आवश्यक है, लेकिन MSDN हमेशा की तरह विवरण पर कम था और सिर्फ एक वाक्य विवरण दिया "इंगित करता है कि एक विधि डिफ़ॉल्ट अधिभार विधि है"

मुझे लगता है इस विशेषता का प्राथमिक कारण यह है क्योंकि जावास्क्रिप्ट केवल पैरामीटर गणना पर ओवरलोडिंग का समर्थन करता है, पैरामीटर प्रकार नहीं। हालांकि, जावास्क्रिप्ट ऐप टाइप ओवरलोड के साथ गैर-डिफ़ॉल्ट WinRT विधियों तक कैसे पहुंच जाएगा?

+0

कोई प्रभाव नहीं हैं। माइक्रोसॉफ्ट ने प्रोग्रामर को विधियों के लिए डिफ़ॉल्ट अधिभार परिभाषित करने की आवश्यकता है। –

+0

@ रामहाउंड लेकिन अगर कोई भाषा अधिभार का समर्थन नहीं करती है तो यह कैसे काम करेगा? – Earlz

+2

@Ramhound उदाहरण के लिए, जावास्क्रिप्ट में यह पता नहीं चलेगा कि किस अधिभार को कॉल करने का प्रयास किया जाता है क्योंकि यह केवल पैरामीटर प्रकार पर अधिभार निर्धारित करता है, पैरामीटर प्रकार पर नहीं (गतिशील होने के कारण) – Earlz

उत्तर

4

जेसी जियांग के रूप में this thread में वर्णित:

जावास्क्रिप्ट अतिभारित तरीकों को अलग करने की क्षमता सीमित है। इसलिए, आपको डिफ़ॉल्ट ओवरलोड फ़ंक्शन सेट करने के लिए फ़ंक्शन नाम बदलने या Windows :: Foundation :: Metadata :: DefaultOverloadAttribute को सेट करने की आवश्यकता है।