Thuộc tính CLSCompliant
là gì?Thuộc tính 'CLSCompliant' trong .NET là gì?
Trả lời
Bạn đánh dấu các lớp học bằng thuộc tính CLSCompliant khi bạn muốn đảm bảo rằng nó có thể được sử dụng bởi bất kỳ ngôn ngữ .NET nào khác. Đây là các quy tắc cơ bản:
Loại chưa ký không nên là một phần của giao diện công khai của lớp học. Điều này có nghĩa là các lĩnh vực công cộng không nên có các loại unsigned như uint hoặc ulong, các phương thức công cộng không nên trả về các kiểu unsigned, các tham số được truyền cho hàm public không nên có các kiểu unsigned. Tuy nhiên các loại unsigned 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 các thành viên công cộng. Tuy nhiên, chúng có thể được sử dụng với các thành viên riêng.
Tên lớp và tên thành viên không được chỉ khác nhau tùy theo trường hợp của chúng. Ví dụ, chúng ta không thể có hai phương thức có tên là MyMethod và MYMETHOD.
Chỉ các thuộc tính và phương thức có thể bị quá tải, Người vận hành không nên quá tải.
Tuân thủ CLS là tập hợp con của phổ ngôn ngữ đầy đủ được CLR cho phép. Nó hạn chế nó cho các tập hợp con có khả năng có sẵn bởi đa số các ngôn ngữ nhắm mục tiêu CLR. Điều này tăng lên, nhưng không đảm bảo rằng thư viện của bạn có thể được sử dụng bởi tất cả các ngôn ngữ nhắm mục tiêu CLR.
Thông báo cho người tiêu dùng khác biết mã của bạn là CLS compliant và cũng làm cho trình biên dịch C# kiểm tra mà CLS của nó tuân thủ cho bạn.
Bài viết được tham chiếu chứa nhiều chi tiết hơn về những gì CLS tuân thủ đòi hỏi.
Vì vậy, nếu tôi thêm thuộc tính và sau đó xây dựng dự án của tôi mà không có khiếu nại, có nghĩa là dự án của tôi là CLS tuân thủ và tất cả là tốt? – Svish
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 thông số kỹ thuậ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 thực hiện và hiểu. Tập hợp này là một tập hợp con của common type system, xác định cách các loại được định nghĩa trong .NET.
Việc 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 sự tuân thủ CLS là không cần thiết, cho bạn sự linh hoạt trong trường hợp CLS tuân thủ sẽ khó khăn hoặc không thể làm được.
Nếu bạn dự định mã của mình được các nhà phát triển khác tiêu thụ, 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 CLSCompliantAttribute vào các assembly của bạn. Nếu bạn không viết thư 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 lắp ráp của bạn được đánh dấu bằng CLSCompliantAttribute, trình biên dịch sẽ (nên!) Kiểm tra mã của bạn để xem nếu được biên dịch, nó sẽ vi phạm bất kỳ quy tắc CLS nào (một số trong số đó là ocdecio được đề cập) và báo cáo vi phạm cho bạn để sửa chữa.
FxCop mang tôi đến đây. –
Vì nó phù hợp ở đây: Để đánh dấu một toàn thể CLS compliant dự án thêm dòng này vào AssemblyInfo.cs
(có thể được tìm thấy dưới Properties trong Solution Explorer)
[assembly:CLSCompliant(true)]
hoặc tương đương trong VB.NET (AssemblyInfo.vb
được ẩn dưới của tôi Dự án)
<Assembly: CLSCompliant(True)>
- 1. ANTLR cho thuộc tính C# và CLSCompliant
- 2. @ trong thuộc tính đối tượng là gì?
- 3. 'Thuộc tính' trong Groovy là gì?
- 4. Thuộc tính ThemeInfo là gì?
- 5. AutoClass trong .net là gì?
- 6. Cách tốt nhất để triển khai thuộc tính tùy chỉnh trong dotnet/.NET là gì?
- 7. Sự khác nhau giữa các thuộc tính CurrentCulture và CurrentUICulture của CultureInfo trong .NET là gì?
- 8. Cách tốt nhất để phân tích một thuộc tính boolean XML (trong .NET) là gì?
- 9. Tham chiếu thuộc tính để kiểm tra .NET Framework 4.5 trong WiX là gì?
- 10. .NET: Nhận tên thuộc tính trong thuộc tính
- 11. Thuộc tính HttpBrowserCapabilities.Crawler .NET
- 12. Thuộc tính contentInset UIScrollView là gì?
- 13. Thuộc tính phối cảnh CSS3 là gì?
- 14. Thay thế các thuộc tính là gì?
- 15. Thuộc tính Unity InjectionConstructor là gì?
- 16. Thuộc tính Java "user.dir" - nghĩa là gì?
- 17. Thuộc tính trang AutoEventWireUp có nghĩa là gì?
- 18. ý nghĩa của thuộc tính ngẫu nhiên jquery trong html là gì? [Expando thuộc tính]
- 19. "Nó" trong thuộc tính được chọn của EntityDataSource là gì?
- 20. Tiện ích của thuộc tính GeneratedCodeAttribute trong C# là gì?
- 21. Mục đích của Thuộc tính trong C# là gì?
- 22. Thuộc tính HTML cho = "" trong <label> là gì?
- 23. Thuộc tính điều hướng trong khung thực thể là gì?
- 24. Thuộc tính khoảng cách trong DMatches có nghĩa là gì?
- 25. Thuộc tính thiết lập nội bộ trong C# là gì?
- 26. Net Nhận tên thuộc tính
- 27. GAC trong .NET là gì?
- 28. WCF trong .NET là gì?
- 29. Sự khác biệt giữa thuộc tính phụ thuộc và thuộc tính đính kèm trong WPF là gì?
- 30. Thuộc tính attribute.specified cho thuộc tính của phần tử DOM là gì?
Bạn có làm điều đó làm mặc định cho mọi dự án không? –
Không nhất thiết, chủ yếu là cho những người có thể tiếp xúc với các ngôn ngữ khác .net. –