Là gì CLSCompliant
thuộc tính?
Là gì CLSCompliant
thuộc tính?
Câu trả lời:
Bạn đánh dấu các lớp bằng CLSCompliant
thuộc tính khi bạn muốn đảm bảo nó có thể được sử dụng bởi bất kỳ ngôn ngữ .NET nào khác.
Đây là những quy tắc cơ bản:
Các kiểu không được gán không nên là một phần của giao diện chung của lớp. Điều này có nghĩa là các trường công cộng không nên có các kiểu không dấu như uint
hoặc ulong
, các phương thức công khai không nên trả về các kiểu không dấu, các tham số được truyền cho hàm công khai không nên có các kiểu không dấu. Tuy nhiên các loại không dấu có thể là một phần của các thành viên tư nhân.
Các loại không an toàn như con trỏ không nên được sử dụng với public
các thành viên. Tuy nhiên, chúng có thể được sử dụng với private
các thành viên.
Tên lớp và tên thành viên không nên chỉ khác nhau dựa trên trường hợp của họ. Ví dụ, chúng ta không thể có hai phương thức được đặt tên MyMethod
và MYMETHOD
.
Chỉ các thuộc tính và phương thức có thể bị quá tải, các toán tử không được quá tải.
Nó nói với những người tiêu dùng khác về mã của bạn rằng nó tuân thủ CLS và cũng làm cho trình biên dịch C # kiểm tra xem nó có tuân thủ CLS cho bạn không.
Bài viết được tham khảo chứa nhiều chi tiết hơn về những gì tuân thủ CLS đòi hỏi.
Các câu trả lời khác là chính xác. Hãy để tôi làm rõ một số điều - CLS là viết tắt của Đặc tả ngôn ngữ chung. Đó là bộ quy tắc tối thiểu và các tính năng ngôn ngữ bắt buộc mà ngôn ngữ .NET phải triển khai và hiểu. Bộ này là một tập hợp con của hệ thống loại phổ biến , định nghĩa cách các loại được định nghĩa trong .NET.
Tuân thủ CLS có nghĩa là bạn có thể viết mã có thể được sử dụng bởi bất kỳ ngôn ngữ nào có thể được biên dịch và chạy trên CLR. Nhưng việc tuân thủ CLS là không bắt buộc, mang lại cho bạn sự linh hoạt trong trường hợp tuân thủ CLS sẽ khó hoặc không thể thực hiện được.
Nếu bạn dự định mã của bạn sẽ được các nhà phát triển khác sử dụng, API của bạn (các lớp và phương thức công khai của bạn) phải tuân thủ CLS. Bạn nên khai báo điều này bằng cách thêm CLSCompliantAttribution vào các hội đồng của bạn. Nếu bạn không viết cho người khác, việc tuân thủ CLS là không cần thiết, mặc dù FxCop ( Framework Cop) sẽ không đồng ý với tôi.
Khi tập hợp của bạn được đánh dấu bằng CLSCompliantAttribution, trình biên dịch sẽ (nên!) Kiểm tra mã của bạn để xem, khi được biên dịch, nó sẽ vi phạm bất kỳ quy tắc CLS nào (một số trong đó ocdecio đã đề cập) và báo cáo vi phạm cho bạn để sửa.
out
- vì vậy tôi nghĩ Microsoft cần xem lại các yêu cầu của CLS và có thể nới lỏng chúng.
Vì nó phù hợp ở đây: Để đánh dấu toàn bộ dự án tuân thủ CLS, hãy thêm dòng này vào AssemblyInfo.cs
(có thể tìm thấy trong Thuộc tính trong Solution Explorer)
[assembly:CLSCompliant(true)]
hoặc tương đương trong VB.NET ( AssemblyInfo.vb
được ẩn trong Dự án của tôi)
<Assembly: CLSCompliant(True)>