2010-01-29 30 views
7

Tôi có một số lớp học, trong đó có một số phương pháp mà tôi không thực sự muốn có mặt ở đó, nhưng đơn giản chỉ vì XML Serializer cần chúng. Có anyway để tạo ra lỗi thời gian biên dịch/cảnh báo nếu họ nhận được gọi là từ người sử dụng mã?Có cách nào để dừng một phương thức được gọi lúc biên dịch không?

Tôi biết rằng tôi có thể triển khai IXmlSerializable và tôi cũng biết rằng tôi có thể tách lớp thành các lớp lưu trữ dữ liệu thuần túy, tuy nhiên, tôi không đặt câu hỏi về cách thiết kế hệ thống như vậy, tôi chỉ đơn giản là yêu cầu nếu có một cách để tạo ra các lỗi thời gian biên dịch/cảnh báo nếu chúng được gọi bởi bất cứ điều gì đó không phải là serializer XML ...

+0

Xem thêm http://stackoverflow.com/questions/968249/c-create-custom-warning-in-visual-studio-if-certain-method-is-used-in-source-co –

Trả lời

14

Bạn có thể thêm

[Obsolete] 

đến phương pháp này. Các tài sản IsError của ObsoleteAttribute kiểm soát xem một lỗi hoặc cảnh báo được tạo ra, và bạn có thể cung cấp một thông điệp giải thích quá.

+0

Tuyệt vời, cảm ơn –

+0

[Lỗi thời], phục vụ một mục đích khác với mục đích của OP. Tôi không nghĩ rằng đây là cách mà thuộc tính này có nghĩa là để được sử dụng. –

+0

@Pop: chắc chắn, mục đích có lẽ hơi khác, nhưng kết quả có lẽ chính xác là những gì được yêu cầu. –

5

Bạn có thể trang trí các thành viên được đề cập với số ObsoleteAttribute. Ý định của nó là một chút khác nhau, nhưng nó sẽ tạo ra cảnh báo trình biên dịch (hoặc lỗi) khi được gọi từ mã người dùng.

0

Bạn có thể ẩn các phương pháp từ người dùng intelliSense bằng cách sử dụng thuộc tính [EditorBrowsable] và từ nhà thiết kế thuộc tính sử dụng thuộc tính [Browsable].

Tôi không khuyên bạn nên sử dụng [ObsoleteAttribute], vì nó chuyển tải ý nghĩa khác về trạng thái phương pháp thực sự là gì. Thay vào đó, hãy sử dụng chú thích cho biết phương thức không nên được sử dụng từ mã người dùng.

Cũng nên nhớ rằng có rất nhiều của người dùng biên dịch mã của họ với cảnh báo mối đe dọa như các lỗi, mà sẽ làm cho không thể cho họ để biên dịch hợp lệ mã, trong trường hợp này.


+0

ObsoleteAttribute truyền tải một ý nghĩa hơi khác, nhưng có hành vi mong muốn. Tôi cho rằng EditorBrowsable không thực sự có ý nghĩa của "bạn không nên gọi điều này từ mã người dùng" hoặc - và nó không tạo ra cảnh báo hoặc lỗi, đó là hành vi mong muốn trong trường hợp này. –

+1

Câu trả lời của Jon khá phù hợp với tôi, bởi vì tôi đang tái cấu trúc một số mã cũ, và tôi không có thời gian để thiết kế lại nó ngay bây giờ, vì vậy nếu tôi có thể sử dụng các mẫu đối tượng nghèo với các lỗi biên dịch , đó là một chiến thắng lớn cho tôi - chắc chắn không phải là máy tính lý tưởng tuyệt vời zen, nhưng một chiến thắng lớn không có ít hơn. –

+0

@Matt Whitfield +1 cho chủ nghĩa thực dụng –

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