2013-03-27 8 views
7

सी # विनिर्देश (17.2) में यह इंगित करता है कि एक विशेषता निर्दिष्ट करते समय कई विशेषता लक्ष्य हैं। यह आम बात है जब आपको किसी ऐसी विशेषता को लागू करने की आवश्यकता होती है जिसमें विशेषता निर्दिष्ट करने के लिए अक्सर "वास्तविक" स्थान नहीं होता है। उदाहरण के लिए, return लक्ष्य मंच आह्वान में अक्सर प्रयोग किया जाता है:विधि विशेषता-लक्ष्य का उद्देश्य क्या है?

[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SomeWin32Method(); //Assume this is valid, has a DllImport, etc. 

हालांकि मैंने देखा method जैसे अन्य विशेषता लक्ष्य देखते हैं कि,:

[method: DllImport("somelib.dll")] 
static extern bool SomeWin32Method(); 

क्या परिस्थितियों में मैं स्पष्ट रूप से निर्धारित करना होगा method विशेषता लक्ष्य (अस्पष्टता को हल करने के लिए कहें), या यह पूरी तरह से पूर्णता के लिए है?

उत्तर

7

आपको इस मामले में लक्ष्य निर्दिष्ट करने की आवश्यकता नहीं है (सीधे एक विधि के ऊपर स्थित, method डिफ़ॉल्ट लक्ष्य है), यह केवल पूर्णता के लिए है। जैसे ही आपको कक्षा में सदस्यों को जोड़ते समय private निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन कई लोग वैसे भी करते हैं। और कई मामलों में कोड जेनरेटर चीजों के बारे में अतिरिक्त स्पष्ट होना पसंद करते हैं। उदाहरण `[विधि: SomeAttr] में

[method: SomeAttr] 
[return: SomeOtherAttr] 
int SomeMethod() { return 0; } 
+1

इसके अलावा,:

इसके अलावा, मैं इस तरह के मामलों में लगता है, अतिरिक्त विनिर्देशक में थोड़ा और अधिक स्पष्ट बातें बनाता सार्वजनिक समारोह कार्रवाई MyFieldLikeEvent;', 'विधि : 'लक्ष्य अनावश्यक नहीं है। इसका मतलब यह है कि विशेषता ऑटो-जेनरेट किए गए एक्सेसर्स ('add' और 'remove') दोनों पर लागू की जानी चाहिए। डिफ़ॉल्ट रूप से ईवेंट को विशेषता लागू करना होगा। –

+0

मेरा मानना ​​है कि आपका मतलब है कि आपको 'आंतरिक' निर्दिष्ट करने की आवश्यकता नहीं है, जो अनिर्दिष्ट फ़ील्ड इत्यादि के लिए डिफ़ॉल्ट एक्सेस संशोधक है। – nicholas

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