มีชั้นเรียนบางอย่างในกรอบที่มีประสิทธิภาพผ่านในลักษณะพิเศษเพื่อทุกประเภทที่ได้มาจากพวกเขาแต่ไม่ได้มีลักษณะเหล่านั้นตัวเอง CLR เองไม่ได้กำหนดข้อห้ามในการใช้คลาสเหล่านั้นเป็นข้อ จำกัด แต่ประเภททั่วไปที่ จำกัด ไว้สำหรับพวกเขาจะไม่ได้รับลักษณะที่ไม่ได้รับการสืบทอดมาอย่างที่ประเภทคอนกรีตจะทำได้ ผู้สร้าง C # ตัดสินใจว่าเนื่องจากพฤติกรรมดังกล่าวอาจทำให้บางคนสับสนและพวกเขาไม่เห็นประโยชน์ใด ๆ กับมันพวกเขาจึงควรห้ามข้อ จำกัด ดังกล่าวแทนที่จะอนุญาตให้พวกเขาประพฤติตามที่พวกเขาทำใน CLR
ตัวอย่างเช่นหากมีคนหนึ่งได้รับอนุญาตให้เขียน: void CopyArray<T>(T dest, T source, int start, int count); หนึ่งจะสามารถส่งผ่านdestและsourceวิธีการที่คาดว่าจะมีอาร์กิวเมนต์ประเภทSystem.Array; อีกคนหนึ่งจะได้รับการตรวจสอบรวบรวมเวลานั้นdestและsourceเป็นชนิดอาร์เรย์ที่เข้ากันได้ แต่จะไม่สามารถที่จะเข้าถึงองค์ประกอบของอาร์เรย์ที่ใช้[]ประกอบการ
การไม่สามารถใช้Arrayเป็นข้อ จำกัด นั้นค่อนข้างง่ายในการแก้ไขเนื่องจากvoid CopyArray<T>(T[] dest, T[] source, int start, int count)จะใช้ได้ในเกือบทุกสถานการณ์ที่วิธีการเดิมจะใช้ได้ผล อย่างไรก็ตามมันมีจุดอ่อน: วิธีการเดิมจะใช้ได้ในสถานการณ์ที่อาร์กิวเมนต์หนึ่งหรือทั้งสองเป็นประเภทSystem.Arrayในขณะที่ปฏิเสธกรณีที่อาร์กิวเมนต์เป็นประเภทอาร์เรย์ที่เข้ากันไม่ได้ การเพิ่มการโอเวอร์โหลดโดยที่อาร์กิวเมนต์ทั้งสองเป็นประเภทSystem.Arrayจะทำให้โค้ดยอมรับกรณีเพิ่มเติมที่ควรยอมรับ แต่ยังทำให้ยอมรับกรณีที่ไม่ควรผิดพลาดด้วย
ฉันพบว่าการตัดสินใจที่จะทำผิดกฎหมายข้อ จำกัด พิเศษส่วนใหญ่นั้นน่ารำคาญ สิ่งเดียวที่จะไม่มีความหมายทางความหมายก็คือSystem.Object[เนื่องจากหากเป็นข้อ จำกัด ทางกฎหมายสิ่งใดก็จะตอบสนองได้] System.ValueTypeอาจไม่มีประโยชน์มากนักเนื่องจากการอ้างอิงประเภทValueTypeไม่ได้มีความเหมือนกันกับประเภทค่ามากนัก แต่อาจมีค่าบางอย่างในกรณีที่เกี่ยวข้องกับการสะท้อนกลับ ทั้งสองอย่างSystem.EnumและSystem.Delegateจะมีการใช้งานจริง แต่เนื่องจากผู้สร้าง C # ไม่ได้คิดถึงสิ่งเหล่านี้พวกเขาจึงผิดกฎหมายโดยไม่มีเหตุผลที่ดี