क्या है CLSCompliant
विशेषता?
क्या है CLSCompliant
विशेषता?
जवाबों:
CLSCompliant
जब आप यह सुनिश्चित करना चाहते हैं कि आप उस विशेषता के साथ कक्षाएं चिह्नित करते हैं, जिसका उपयोग किसी अन्य .NET भाषा द्वारा किया जा सकता है।
ये मूल नियम हैं:
अहस्ताक्षरित प्रकार वर्ग के सार्वजनिक इंटरफ़ेस का हिस्सा नहीं होना चाहिए। इसका मतलब यह है कि सार्वजनिक क्षेत्रों में अहस्ताक्षरित प्रकार नहीं होने चाहिएuint
या ulong
, सार्वजनिक विधियों को अहस्ताक्षरित प्रकारों को वापस नहीं करना चाहिए, सार्वजनिक फ़ंक्शन को दिए गए मापदंडों में अहस्ताक्षरित प्रकार नहीं होने चाहिए। हालांकि अहस्ताक्षरित प्रकार निजी सदस्यों का हिस्सा हो सकते हैं।
सदस्यों की तरह असुरक्षित प्रकार के पॉइंटर्स का उपयोग नहीं किया जाना चाहिए public
। हालाँकि इनका उपयोग किया जा सकता हैprivate
सदस्यों के ।
वर्ग के नाम और सदस्य के नाम केवल उनके मामले के आधार पर भिन्न नहीं होने चाहिए। उदाहरण के लिए हमारे पास दो विधियाँ नहीं हैं जिनका नाम MyMethod
और हैMYMETHOD
।
केवल संपत्तियों और विधियों को अधिभारित किया जा सकता है, ऑपरेटरों को अतिभारित नहीं किया जाना चाहिए।
यह आपके कोड के अन्य उपभोक्ताओं को बताता है कि यह सीएलएस अनुपालन है , और सी # कंपाइलर चेक भी करता है कि यह आपके लिए सीएलएस अनुपालन है।
संदर्भित लेख में CLS अनुपालन की आवश्यकता के बारे में बहुत अधिक विवरण हैं।
अन्य उत्तर सही हैं। मुझे कुछ चीजें स्पष्ट करने दो - सीएलएस आम भाषा विशिष्टता के लिए खड़ा है। यह नियमों का न्यूनतम सेट है और आवश्यक भाषा सुविधाएँ जिन्हें .NET भाषा को लागू करना और समझना होगा। यह सेट सामान्य प्रकार की प्रणाली का सबसेट है , जो परिभाषित करता है कि कैसे .NET में परिभाषित किए गए हैं।
सीएलएस कंप्लेंट होने का मतलब है कि आप वह कोड लिख सकते हैं जो किसी भी भाषा द्वारा उपभोग किया जा सकता है जिसे सीएलआर पर संकलित और चलाया जा सकता है। लेकिन सीएलएस अनुपालन की आवश्यकता नहीं है, आपको उन मामलों में लचीलापन देता है जहां सीएलएस अनुपालन कठिन या असंभव होगा।
यदि आप अपने कोड को अन्य डेवलपर्स द्वारा उपभोग किए जाने का इरादा रखते हैं, तो आपके एपीआई (आपके सार्वजनिक कक्षाएं और तरीके) सीएलएस का अनुपालन होना चाहिए। आपको अपनी विधानसभाओं में CLSCompliantAttribute को जोड़कर इसे घोषित करना चाहिए। यदि आप दूसरों के लिए नहीं लिख रहे हैं, तो सीएलएस अनुपालन आवश्यक नहीं है, हालांकि एफएक्सपॉप ( फ्रेमवर्क) कॉप) मुझसे असहमत होगा।
जब आपकी असेंबली CLSCompliantAttribute के साथ चिह्नित की जाती है, तो संकलक (चाहिए!) यह देखने के लिए कि क्या, कब संकलित किया गया है, अपने कोड की जांच करेगा, यह सीएलएस नियमों में से कुछ का उल्लंघन करेगा (जिनमें से कुछ ocdecio का उल्लेख किया गया है) और फिक्सिंग के लिए आपको उल्लंघन की रिपोर्ट करेगा।
out
मापदंडों का समर्थन करने में कोई समस्या नहीं है - इसलिए मुझे लगता है कि Microsoft को CLS की आवश्यकताओं को फिर से समझने और शायद उन्हें ढीला करने की आवश्यकता है।
सीएलएस अनुपालन सीएलआर द्वारा अनुमत पूर्ण भाषा स्पेक्ट्रम का एक सबसेट है। यह उन सबसेट्स को प्रतिबंधित करता है, जो CLR को लक्षित करने वाली अधिकांश भाषाओं द्वारा उपलब्ध हैं। यह बढ़ता है, लेकिन यह गारंटी नहीं देता है कि आपके पुस्तकालय का उपयोग सीएलआर को लक्षित करने वाली सभी भाषाओं द्वारा किया जा सकता है।
जैसा कि यह यहाँ फिट बैठता है: एक पूरी परियोजना को चिह्नित करने के लिए सीएलएस अनुरूप इस लाइन को AssemblyInfo.cs
(समाधान एक्सप्लोरर में गुण के तहत पाया जा सकता है)
[assembly:CLSCompliant(true)]
या VB.NET में समकक्ष ( AssemblyInfo.vb
मेरी परियोजना के तहत छिपा हुआ है)
<Assembly: CLSCompliant(True)>
आपका कोड CLS अनुरूप बनाने के लिए धन्यवाद ।