2009-02-20 43 views

Trả lời

153

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

+0

Bạn có làm điều đó làm mặc định cho mọi dự án không? –

+2

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. –

11

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.

42

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.

+11

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

34

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.

+0

FxCop mang tôi đến đây. –

6

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)> 

Nhờ Making Your Code CLS Compliant.

Các vấn đề liên quan