2010-08-13 14 views
28

मुझे इस alt text जैसी चेतावनी मिलती है यदि आप जानते हैं कि यह क्या है, तो कृपया इसे & से छुटकारा पाने में मेरी सहायता करें। नाम।तर्क प्रकार सीएलएस-अनुरूप नहीं है, क्यों?

+2

INotificationService कैसा दिखता है? –

उत्तर

41

अपने AssemblyInfo.cs फ़ाइल में, आप शायद एक लाइन है कि पढ़ता

[assembly:CLSCompliant(true)] 

आप करते हैं, तो निम्न नियमों का पूरा होना आवश्यक हैं मिल गया है। (http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/ से कॉपी-पास्ता)

  1. अहस्ताक्षरित प्रकार वर्ग के सार्वजनिक इंटरफ़ेस का हिस्सा नहीं होना चाहिए। इसका अर्थ यह है कि सार्वजनिक क्षेत्रों में यूंटा या उलझन जैसे हस्ताक्षर किए गए प्रकार नहीं होना चाहिए, सार्वजनिक तरीकों को हस्ताक्षरित प्रकार वापस नहीं करना चाहिए, सार्वजनिक फ़ंक्शन में पारित पैरामीटर को हस्ताक्षरित प्रकार नहीं होना चाहिए। हालांकि हस्ताक्षर किए गए प्रकार निजी सदस्यों का हिस्सा हो सकते हैं।

  2. असुरक्षित प्रकार जैसे पॉइंटर्स का उपयोग सार्वजनिक सदस्यों के साथ नहीं किया जाना चाहिए। हालांकि वे निजी सदस्यों के साथ इस्तेमाल किया जा सकता है।

  3. कक्षा के नाम और सदस्य नाम केवल उनके मामले के आधार पर भिन्न नहीं होना चाहिए। उदाहरण के लिए हमारे पास MyMethod और MYMETHOD नामक दो विधियां नहीं हो सकती हैं।

  4. केवल गुण और विधियों को अधिभारित किया जा सकता है, ऑपरेटरों को ओवरलोड नहीं किया जाना चाहिए।

+0

असाइन किए गए प्रकार सार्वजनिक इंटरफ़ेस का हिस्सा हो सकते हैं, यदि वे किसी भी कार्यक्षमता का पर्दाफाश नहीं करते हैं, बिना किसी हस्ताक्षर किए गए किसी भाषा में लिखे गए कोड का उपयोग करना चाहते हैं लेकिन ऐसा करने में असमर्थ हैं।उदाहरण के लिए, 32-बिट हस्ताक्षरित मान को लगातार चार बाइट्स में स्टोर करने की विधि वैध रूप से 'UInt32' और' Int64' दोनों के लिए ओवरलोड हो सकती है, और एक वर्ग लगातार चार बाइट्स को 'UInt32' में परिवर्तित करने का तरीका प्रदान कर सकता है यदि यह भी एक ऐसा प्रदान किया जो एक ही मान को 'Int64' के रूप में वापस कर देगा। – supercat

2

कुछ अधिक जानकारी:

और आप एक सीएलएस अनुरूप विधानसभा में उन चेतावनी प्राप्त कर सकते हैं, का संदर्भ देता है एक गैर सीएलएस अनुरूप विधानसभा (और उसके उजागर करता है गैर सीएलएस अनुरूप सदस्य):

+1

पहला लिंक टूटा हुआ। – rkg

5

यह एक पुराना सवाल है, लेकिन मैंने सोचा कि भविष्य में जांचकर्ताओं (जैसे स्वयं) के लिए एक बेहतर स्पष्टीकरण दे रहा था।

सबसे पहले, अन्य उत्तरों में दिए गए लिंक इस चेतावनी के कारण में बहुत विस्तार से प्रदान करते हैं।

हालांकि, संक्षेप में, सामान्य भाषा रनटाइम (जैसे सी #) के लिए लिखित कोड सीएलएस-अनुपालन है यदि यह सीएलआर के लिए डिज़ाइन की गई अन्य भाषाओं के साथ इंटरफ़ेस कर सकता है। इसका मतलब यह है कि पूरे रनटाइम के लिए सामान्य भाषा के लिए विशिष्ट डेटाटाइप अनुरूप नहीं हैं। चर और विधियों के संबंध में इसके लिए त्वरित और आसान फिक्स उन्हें दृश्यता संशोधक internal देना है जो निर्दिष्ट करता है कि विधि, वर्ग, संपत्ति इत्यादि उस असेंबली के बाहर दिखाई नहीं दे रही है जिसके लिए इसे बनाया जा रहा है। यह केवल उन्हीं वस्तुओं पर किया जाना चाहिए जिनकी आपको आवश्यकता नहीं है या विधानसभा के बाहर उपयोग करना चाहते हैं; जिन लोगों को आप दिखाना चाहते हैं, उनके लिए सीएलएस-अनुपालन वाले डेटाटाइप का उपयोग करें।

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