2009-02-20 11 views

उत्तर

153

जब आप यह सुनिश्चित करना चाहते हैं कि इसका उपयोग किसी भी अन्य .NET भाषा द्वारा किया जा सकता है, तो आप CLSCompliant विशेषता के साथ कक्षाओं को चिह्नित करते हैं। ये बुनियादी नियम हैं:

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

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

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

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

+0

क्या आप इसे प्रत्येक परियोजना के लिए डिफ़ॉल्ट के रूप में करेंगे? –

+2

जरूरी नहीं, ज्यादातर उन लोगों के लिए जो अन्य .NET भाषाओं के संपर्क में हो सकते हैं। –

11

सीएलएस अनुपालन सीएलआर द्वारा अनुमत पूर्ण भाषा स्पेक्ट्रम का सबसेट है। यह उन सबसेट्स को प्रतिबंधित करता है जो सीएलआर को लक्षित करने वाली अधिकांश भाषाओं द्वारा उपलब्ध हैं। यह बढ़ता है, लेकिन गारंटी नहीं देता है कि आपकी लाइब्रेरी का उपयोग सीएलआर को लक्षित करने वाली सभी भाषाओं द्वारा किया जा सकता है।

42

यह आपके कोड के अन्य उपभोक्ताओं को बताता है कि यह CLS compliant है, और सी # कंपाइलर भी जांचता है कि यह आपके लिए सीएलएस अनुपालन करता है।

संदर्भित आलेख में सीएलएस अनुपालन के बारे में बहुत अधिक जानकारी है।

+11

इसलिए यदि मैं विशेषता जोड़ता हूं और फिर मेरी परियोजना का कोई शिकायत नहीं करता है, तो इसका मतलब है कि मेरी परियोजना सीएलएस अनुपालन है और सब अच्छा है? – Svish

34

अन्य उत्तरों सही हैं। मुझे कुछ चीजों को स्पष्ट करने दें - सीएलएस सामान्य भाषा विशिष्टता के लिए खड़ा है। यह नियमों और आवश्यक भाषा सुविधाओं का न्यूनतम सेट है जो एक .NET भाषा को लागू और समझना चाहिए। यह सेट common type system का उप-समूह है, जो परिभाषित करता है कि .NET में किस प्रकार परिभाषित किए गए हैं।

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

यदि आप अन्य डेवलपर्स द्वारा अपना कोड उपभोग करने का इरादा रखते हैं, तो आपकी एपीआई (आपकी सार्वजनिक कक्षाएं और विधियां) सीएलएस अनुपालन होनी चाहिए। आपको अपनी असेंबली में CLSCompliantAttribute जोड़कर इसे घोषित करना चाहिए। यदि आप दूसरों के लिए नहीं लिख रहे हैं, तो सीएलएस अनुपालन आवश्यक नहीं है, हालांकि FxCop (फ्रेमवर्क कॉप) मुझसे असहमत होगा।

अपने विधानसभा CLSCompliantAttribute के साथ चिह्नित किया जाता है, संकलक (जाना चाहिए!) अपने कोड है, जब संकलित, यह सीएलएस से कोई भी नियम (जिनमें से कुछ ocdecio उल्लेख) का उल्लंघन और उल्लंघन की रिपोर्ट देखने के लिए जाँच करेगा फिक्सिंग के लिए आप के लिए।

+0

FxCop मुझे यहाँ लाया। –

6

इसे यहाँ फिट बैठता है के रूप में: चिह्नित करने के लिए एक पूरी परियोजना सीएलएस अनुरूप AssemblyInfo.cs में यह पंक्ति जोड़ (समाधान Explorer में गुण के तहत पाया जा सकता है)

[assembly:CLSCompliant(true)] 

या समतुल्य रूप VB.NET में (AssemblyInfo.vb के नीचे छिपा है मेरी परियोजना)

<Assembly: CLSCompliant(True)> 

Making Your Code CLS Compliant के लिए धन्यवाद।

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