Câu trả lời:
Không phải tất cả các ngôn ngữ đều có khái niệm về int không dấu. Ví dụ, VB 6 không có khái niệm int không dấu mà tôi nghi ngờ đã dẫn đến quyết định không thực hiện của các nhà thiết kế VB7 / 7.1 (nó hiện được triển khai trong VB8).
Để trích:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
CLS được thiết kế đủ lớn để bao gồm các cấu trúc ngôn ngữ thường được các nhà phát triển cần, nhưng cũng đủ nhỏ để hầu hết các ngôn ngữ có thể hỗ trợ nó. Ngoài ra, bất kỳ cấu trúc ngôn ngữ nào khiến không thể nhanh chóng xác minh độ an toàn của loại mã đã bị loại trừ khỏi CLS để tất cả các ngôn ngữ tuân thủ CLS có thể tạo ra mã có thể xác minh nếu họ chọn làm như vậy.
Cập nhật: Tôi đã tự hỏi về điều này vài năm trước và trong khi tôi không thể hiểu tại sao một UInt không thể xác minh được loại an toàn, tôi đoán các chàng trai CLS đã phải có một điểm cắt ở đâu đó về mức tối thiểu cơ bản số loại giá trị được hỗ trợ. Ngoài ra, khi bạn nghĩ về dài hạn khi ngày càng có nhiều ngôn ngữ được chuyển sang CLR, tại sao lại buộc chúng thực hiện các int không dấu để đạt được sự tuân thủ CLS nếu hoàn toàn không có khái niệm nào?
Tôi nghi ngờ một phần của vấn đề xoay quanh thực tế là các kiểu số nguyên không dấu trong C được yêu cầu hoạt động như các thành viên của một vòng đại số trừu tượng chứ không phải là các số [nghĩa là nếu một biến số nguyên 16 bit không dấu bằng 0 , giảm nó là bắt buộcđể mang lại 65,535 và nếu nó bằng 65,535 thì khi tăng dần thì bắt buộc phải mang lại bằng không.] Đôi khi hành vi như vậy cực kỳ hữu ích, nhưng các kiểu số thể hiện hành vi như vậy có thể đã đi ngược lại tinh thần của một số ngôn ngữ. Tôi phỏng đoán rằng quyết định bỏ qua các loại không được đánh dấu có thể có trước quyết định hỗ trợ cả ngữ cảnh số được kiểm tra và không được kiểm tra. Cá nhân tôi ước có các kiểu số nguyên riêng biệt cho các số không dấu và các vành đại số; áp dụng toán tử trừ một bậc cho số 32-bit không dấu sẽ mang lại kết quả có dấu 64-bit [phủ định bất kỳ điều gì khác 0 sẽ mang lại số âm] nhưng việc áp dụng phép trừ một bậc cho một kiểu vòng sẽ tạo ra nghịch đảo cộng trong vòng đó.
Trong mọi trường hợp, lý do số nguyên không dấu không tuân thủ CLS là do Microsoft quyết định rằng các ngôn ngữ không cần phải hỗ trợ số nguyên không dấu để được coi là "tương thích với CLS".
Các int không dấu không giúp bạn đạt được nhiều điều đó trong cuộc sống thực, tuy nhiên việc có nhiều hơn 1 loại int sẽ khiến bạn đau đầu, vì vậy rất nhiều ngôn ngữ chỉ có int đơn.
Tuân thủ CLS nhằm cho phép một lớp được sử dụng từ nhiều ngôn ngữ…
Hãy nhớ rằng không ai bắt bạn phải tuân thủ CLS.
Bạn vẫn có thể sử dụng các int chưa được ký trong một phương thức hoặc dưới dạng parms cho một phương thức riêng tư , vì nó chỉ là API công khai mà tuân thủ CLS hạn chế.
Các số nguyên không dấu không tuân thủ CLS vì chúng không thể tương tác giữa các ngôn ngữ nhất định.