2012-07-02 31 views
13

Các công cụ sửa đổi truy cập như public, private không được phép trên các hàm tạo tĩnh trong C#. Tuy nhiên, phân tích mã Visual Studio có cảnh báo trong danh mục bảo mật C# có nội dung "CA2121: Static constructors should be private".Làm cách nào để các nhà thầu tĩnh có thể được tạo ra không riêng tư?

Có thể tạo một hàm tạo tĩnh không riêng tư không? Hoặc là một lỗi của phân tích mã Visual Studio?

CLARIFICATION: Tôi không cố gắng tạo bất kỳ nhà xây dựng nào không riêng tư. Vậy tại sao?" câu hỏi không liên quan. Tôi chỉ tò mò về sự mâu thuẫn giữa hai công cụ của Microsoft và muốn xem liệu có bất kỳ điều gì tôi không biết về cách các nhà thầu tĩnh được xử lý hay không.

+0

Trích dẫn từ liên kết ở trên: 'Người dùng không có quyền kiểm soát khi nào hàm dựng tĩnh được gọi. Nếu một hàm tạo tĩnh không phải là private, nó có thể được gọi bằng mã khác với hệ thống. Tùy thuộc vào các hoạt động được thực hiện trong hàm tạo, điều này có thể gây ra hành vi không mong muốn.' – Tisho

+1

Tôi nghĩ, báo giá liên quan là "Quy tắc này được thực thi bởi trình biên dịch C# và Visual Basic .NET". Vì vậy, không, bạn không thể làm cho nó không riêng tư trong C#. – Henrik

Trả lời

9

Một hàm tạo tĩnh C# luôn là riêng tư. Bạn sẽ không bao giờ thấy cảnh báo đó cho mã C# và cảnh báo không hữu ích ở đó. Mã phân tích có sẵn cho các ngôn ngữ khác quá, tuy nhiên, và đó là những ngôn ngữ khác có thể khiến bạn viết các lớp học với các nhà xây dựng tĩnh không tư nhân.

+0

Vậy tại sao nó được áp dụng cho C#? Bạn có nghĩ đó là lỗi không? –

+0

@ssg Ở đâu được nêu? – hvd

+0

@ssg Nếu bạn đang đề cập đến "Quy tắc này được thực thi bởi trình biên dịch C# và Visual Basic .NET."được đề cập trong bình luận về câu hỏi của bạn, thì không, điều đó có nghĩa là trình biên dịch đã đảm bảo rằng các hàm tạo tĩnh là riêng tư, có nghĩa là cảnh báo này sẽ không bao giờ được kích hoạt" – hvd

3

Nếu bạn đọc các tài liệu đó nêu rõ

Nếu một constructor tĩnh là không tin, nó có thể được gọi bởi mã khác ngoài hệ thống. Tùy thuộc vào các hoạt động được thực hiện trong hàm tạo, điều này có thể gây ra hành vi không mong muốn.

Tôi cho rằng câu hỏi quan trọng hơn sẽ là tại sao bạn muốn?

+0

Vấn đề là tôi không thể. Trình biên dịch đưa ra lỗi khi tôi cố gắng thêm tiền tĩnh với một công cụ sửa đổi truy cập. Có thể ở cấp độ IL? –

+0

C# không cho phép người quản lý không phải là tư nhân, xem Hendriks bình luận ở trên. – usr

+0

@ssg Tôi sẽ tự hỏi bản thân * tại sao * bạn cần nó là thứ gì đó không phải là 'riêng tư '. Tôi sẽ nói một cách an toàn rằng thiết kế của bạn có thể có nhiều khả năng sai lầm hơn nhóm C# thiếu một mẹo để sử dụng các nhà xây dựng tĩnh không riêng tư. – James

1

Có thể tạo một hàm tạo tĩnh không riêng tư không?

Điều gì sẽ là ý nghĩa của nó?

Một hàm tạo tĩnh được gọi là thời điểm lớp được tải từ trình liên kết, trước khi thực hiện bất kỳ phương thức nào. Như vậy, một nhà xây dựng tĩnh không thể hợp lý được gọi bên ngoài cuộc gọi tự động từ trình liên kết, có nghĩa là không có ý nghĩa trong nó có bất kỳ công cụ sửa đổi truy cập nào.

Về cơ bản, bạn không thể tham chiếu đến lớp học KHÔNG THỰC HIỆN ĐIỀU CHỈNH STATIC - và trước khi mã của bạn bao gồm tham chiếu thực thi.

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