.NET में 'CLSCompliant' विशेषता क्या है?


जवाबों:


181

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

  1. अहस्ताक्षरित प्रकार वर्ग के सार्वजनिक इंटरफ़ेस का हिस्सा नहीं होना चाहिए। इसका मतलब यह है कि सार्वजनिक क्षेत्रों में अहस्ताक्षरित प्रकार नहीं होने चाहिएuint या ulong, सार्वजनिक विधियों को अहस्ताक्षरित प्रकारों को वापस नहीं करना चाहिए, सार्वजनिक फ़ंक्शन को दिए गए मापदंडों में अहस्ताक्षरित प्रकार नहीं होने चाहिए। हालांकि अहस्ताक्षरित प्रकार निजी सदस्यों का हिस्सा हो सकते हैं।

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

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

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


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

3
जरूरी नहीं कि ज्यादातर उन लोगों के लिए हो जो दूसरी .net भाषाओं के संपर्क में हैं।
ओट्टोवियो डेसियो

1
एक और प्रतिबंध CS3006 है: अतिभारित विधि 'Foo.Bar (Ref Baz)' केवल रेफ या आउट या सरणी रैंक में भिन्न होती है, CLS- अनुरूप नहीं है
आकर्षित नोक

एक और: सार्वजनिक पहचानकर्ताओं को एक अंडरस्कोर चरित्र से शुरू नहीं करना चाहिए।
क्रोनो

44

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

संदर्भित लेख में CLS अनुपालन की आवश्यकता के बारे में बहुत अधिक विवरण हैं।


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

@ सविश, जी हां यही मामला है। संकलक आपको बताएगा कि क्या आप किसी भी नियम का उल्लंघन करते हैं।
ड्रू नॉक

41

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

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

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

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


FxCop मुझे यहाँ लाया।
टेमन शिपही

दुर्भाग्य से सीएलआर की कई अलग-अलग फ्रंटेंड लैंग्वेज (जैसे VB.NET - जिसमें एक धीमी मौत मर रही है) की भव्य-दृष्टि और अब चली गई MC MC, Delphi.NET, Oxygene, J #, JScript.NET, और इसी तरह) CLSCompliance को पूरा करने का लाभ यह दिया गया है कि CLR का समर्थन करने वाली अन्य शेष भाषाओं को गैर-CLSCompliant सुविधाओं जैसे वैकल्पिक मापदंडों और outमापदंडों का समर्थन करने में कोई समस्या नहीं है - इसलिए मुझे लगता है कि Microsoft को CLS की आवश्यकताओं को फिर से समझने और शायद उन्हें ढीला करने की आवश्यकता है।
दाई

13

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


8

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

[assembly:CLSCompliant(true)]

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

<Assembly: CLSCompliant(True)>

आपका कोड CLS अनुरूप बनाने के लिए धन्यवाद ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.