อะไรคือสิ่งที่CLSCompliant
แอตทริบิวต์?
อะไรคือสิ่งที่CLSCompliant
แอตทริบิวต์?
คำตอบ:
คุณทำเครื่องหมายคลาสที่มีแอCLSCompliant
ททริบิวต์เมื่อคุณต้องการตรวจสอบให้แน่ใจว่าสามารถใช้งานได้กับภาษา. NET อื่น ๆ
นี่คือกฎพื้นฐาน:
ประเภทที่ไม่ได้ลงนามไม่ควรเป็นส่วนหนึ่งของส่วนต่อประสานสาธารณะของชั้นเรียน สิ่งนี้หมายความว่าอะไรเขตข้อมูลสาธารณะไม่ควรมีประเภทที่ไม่ได้ลงนามเช่นuint
หรือulong
วิธีการสาธารณะไม่ควรส่งคืนประเภทที่ไม่ได้ลงนามพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชันสาธารณะไม่ควรมีประเภทที่ไม่ได้ลงนาม อย่างไรก็ตามประเภทที่ไม่ได้ลงนามสามารถเป็นส่วนหนึ่งของสมาชิกส่วนตัว
ประเภทที่ไม่ปลอดภัยเช่นพอยน์เตอร์ไม่ควรใช้กับpublic
สมาชิก อย่างไรก็ตามพวกเขาสามารถใช้กับprivate
สมาชิก
ชื่อคลาสและชื่อสมาชิกไม่ควรแตกต่างกันตามกรณีของพวกเขา ตัวอย่างเช่นเราไม่สามารถมีสองวิธีการตั้งชื่อและMyMethod
MYMETHOD
คุณสมบัติและเมธอดเท่านั้นที่สามารถโอเวอร์โหลดได้ผู้ประกอบการไม่ควรโอเวอร์โหลด
มันบอกผู้บริโภครายอื่นถึงรหัสของคุณว่าเป็นอย่างไร ไปตาม CLSและยังทำให้คอมไพเลอร์ C # ตรวจสอบว่ามันเป็นไปตาม CLS สำหรับคุณ
บทความที่อ้างอิงมีรายละเอียดเพิ่มเติมมากมายเกี่ยวกับความสอดคล้องของ CLS
คำตอบอื่น ๆ นั้นถูกต้อง ให้ฉันอธิบายบางสิ่งบางอย่าง - CLS ย่อมาจากข้อกำหนดภาษาทั่วไป เป็นชุดกฎขั้นต่ำและคุณสมบัติภาษาที่ต้องการซึ่งภาษา. NET จะต้องนำไปใช้และเข้าใจ ชุดนี้เป็นส่วนย่อยของระบบประเภททั่วไปซึ่งกำหนดวิธีการกำหนดประเภทใน. NET
การเป็นไปตาม CLS หมายความว่าคุณสามารถเขียนโค้ดที่สามารถใช้งานได้กับภาษาใด ๆ ที่สามารถรวบรวมและเรียกใช้บน CLR แต่ไม่จำเป็นต้องปฏิบัติตาม CLS ให้ความยืดหยุ่นแก่คุณในกรณีที่การปฏิบัติตาม CLS นั้นยากหรือเป็นไปไม่ได้
หากคุณต้องการให้นักพัฒนาอื่นใช้รหัสของคุณ API ของคุณ (คลาสสาธารณะและวิธีการ) ควรเป็นไปตาม CLS คุณควรประกาศสิ่งนี้ด้วยการเพิ่ม CLSCompliantAttribute ไปยังแอสเซมบลีของคุณ หากคุณไม่ได้เขียนเพื่อคนอื่นการปฏิบัติตาม CLS นั้นไม่จำเป็นแม้ว่าFxCop ( Framework Cop) จะไม่เห็นด้วยกับฉัน
เมื่อแอสเซมบลีของคุณถูกทำเครื่องหมายด้วย CLSCompliantAttribute คอมไพเลอร์จะ (ควร!) ตรวจสอบรหัสของคุณเพื่อดูว่าเมื่อรวบรวมแล้วมันจะละเมิดกฎ CLS ใด ๆ (ที่ocdecioพูดถึง) และรายงานการละเมิดให้คุณแก้ไข
out
- ดังนั้นฉันคิดว่า Microsoft ต้องทบทวนข้อกำหนดของ CLS อีกครั้งและอาจคลายได้
สอดคล้องกับ CLS เป็นส่วนย่อยของสเปกตรัมภาษาเต็มรูปแบบที่ได้รับอนุญาตจาก CLR โดย จำกัด ไว้เฉพาะชุดย่อยที่มีแนวโน้มว่าจะใช้ได้กับภาษาส่วนใหญ่ที่กำหนดเป้าหมาย CLR สิ่งนี้จะเพิ่มขึ้น แต่ไม่รับประกันว่าห้องสมุดของคุณสามารถใช้งานได้กับทุกภาษาที่กำหนดเป้าหมาย CLR
ตามที่เหมาะสมที่นี่: เมื่อต้องการทำเครื่องหมายทั้งโครงการที่สอดคล้องกับ CLS ให้เพิ่มบรรทัดนี้ในAssemblyInfo.cs
(สามารถพบได้ในคุณสมบัติในโซลูชัน Explorer)
[assembly:CLSCompliant(true)]
หรือเทียบเท่าใน VB.NET ( AssemblyInfo.vb
ถูกซ่อนอยู่ภายใต้โครงการของฉัน)
<Assembly: CLSCompliant(True)>
ขอบคุณที่ทำให้รหัสของคุณตาม CLS