2008-11-24 31 views
193

thể trùng lặp:
How do I mark a method as Obsolete/Deprecated? - C#Cách đánh dấu một lớp là Không được chấp nhận?

Làm thế nào để bạn đánh dấu một lớp học như bị phản đối? Tôi không muốn sử dụng một lớp nữa trong dự án của mình, nhưng không muốn xóa nó trước một khoảng thời gian 2 tuần.

+13

Không phải là hình thức xấu để đánh dấu câu hỏi trước đó là trùng lặp? – noelicus

+2

Chúng ta nên đánh dấu câu hỏi đầu tiên là Đã lỗi thời/Không được chấp nhận. Vì vậy, câu hỏi là bây giờ: Làm thế nào để đánh dấu một câu hỏi là không được chấp nhận? –

Trả lời

343

Bạn cần sử dụng thuộc tính [Obsolete].

Đây là một ví dụ:

[Obsolete("Not used anymore",true)] 
public class MyDeprecatedClass 
{ 
    //... 
} 

Bạn không cần phải thông số sử dụng, họ là không bắt buộc (phương pháp quá tải). Tham số đầu tiên là vì lý do và thông số cuối cùng là đánh dấu một Lỗi trong thời gian biên dịch thay vì cảnh báo.

+0

'[Lỗi thời (" Không được sử dụng nữa ", đúng)]' ở đây bị hai lỗi chính: 1. Nếu mã không được sử dụng nữa, nó sẽ bị xóa 2. Giải thích không cung cấp thông tin về những gì cần sử dụng/thay vào đó. – mayu

-5

Nếu bạn đang sử dụng kiểm soát phiên bản, tôi khuyên bạn chỉ nên xóa lớp học. Không có lý do để có mã không sử dụng xung quanh.

Kiểm soát phiên bản sẽ là một hoàn tác tiện dụng nếu bạn quyết định sau đó bạn muốn lớp học.

+3

Tôi đoán/giả sử anh ta muốn đánh dấu nó không được chấp nhận để cho phép mã vẫn được biên dịch trong khi chờ đợi trong khi anh ta xóa tất cả các tham chiếu đến nó trong codebase. – shsteimer

+0

Tôi đồng ý, Tại sao không xóa lớp học hoặc nếu bạn không có quyền kiểm soát phiên bản, hãy bình luận? – configurator

+0

Đó sẽ là một lý do tuyệt vời để không sử dụng giải pháp của tôi, tôi đoán vậy. – jjnguy

16

Lý do không xóa một lớp và không dùng nữa thay vì phải tuân thủ một số "chính sách lịch sự" khi mã của bạn là API bị estabished và sau đó được các bên thứ ba tiêu thụ.

Nếu bạn không dùng nữa thay vì xóa, bạn cung cấp cho người tiêu dùng chính sách vòng đời (ví dụ: bảo trì và tồn tại các lớp cho đến phiên bản X.X) để cho phép họ lập kế hoạch di chuyển thích hợp sang API mới của bạn.

35

Như mỗi câu trả lời Doak, nhưng tham số thứ hai của thuộc tính nên được đặt thành false nếu bạn muốn mã để biên dịch:

[Obsolete("Not used anymore", false)] 
public class MyDeprecatedClass 
{ 
     //... 
} 

này chỉ sẽ ném cảnh báo.

+1

Bạn cũng có thể để thuộc tính tắt hoàn toàn (mặc định là false): '[Lỗi thời (" Không được sử dụng nữa ")]'; cá nhân tôi tìm thấy điều này dễ đọc hơn mà không có boolean ở cuối. – Wolfgang

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