Làm thế nào để đánh dấu một phương pháp là lỗi thời hoặc không dùng nữa?


1003

Làm cách nào để tôi đánh dấu một phương thức là lỗi thời hoặc không dùng nữa bằng C # ?


Dưới đây là video YouTube giải thích tất cả 3 biến thể của thuộc tính Lỗi thời: youtube.com/watch?v=_AQ5wsPnfJ4
Shivprasad Koirala

3
Đừng quên cũng có [EditorBrowsable(EditorBrowsableState.Never)]( stackoverflow.com/a/9086345/661933 ). Phục vụ một mục đích hơi khác nhau.
nawfal 16/03/18

Câu trả lời:


1595

Con đường ngắn nhất là bằng cách thêm vào ObsoleteAttributenhư một thuộc tính để phương pháp này . Đảm bảo bao gồm một lời giải thích phù hợp:

[Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
{  }

Bạn cũng có thể khiến quá trình biên dịch thất bại, coi việc sử dụng phương thức là lỗi thay vì cảnh báo , nếu phương thức được gọi từ đâu đó trong mã như thế này:

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]

98
nếu bạn muốn trình biên dịch đưa ra lỗi nếu ai đó sử dụng phương thức, hãy sử dụng phương thức quá tải Lỗi thời (Thông báo chuỗi, lỗi Bool)
HitLikeAHammer

141
Lỗi thời không có mô tả nên lỗi thời ... notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html
dotjoe

31
Trong các ví dụ của bạn, phần "Phương thức 1 không được dùng nữa" là khá dư thừa. Bằng cách đánh dấu nó là lỗi thời, bạn đang nói rằng nó thực sự lỗi thời, vì vậy không cần phải khôi phục nó trong tin nhắn. Đặc biệt, vì cảnh báo / lỗi kết quả sẽ đọc 'Phương thức 1' đã lỗi thời: 'Phương thức 1 không được chấp nhận, thay vào đó, vui lòng sử dụng Phương thức 2'.
phi thực tế

8
Tốt rồi. Tôi chỉ đặt một số văn bản ví dụ ở đó để cho thấy rằng bạn có thể thêm một thông điệp cụ thể hơn nếu bạn muốn.
Chris Ballance

14
@ akshay2000 Đổi tên hoặc xóa phương thức sẽ khiến người tiêu dùng không biết tại sao nó được đổi tên hoặc xóa và những gì nên được sử dụng thay thế.
Lensflare 7/07/2016

136

Để đánh dấu là lỗi thời với một cảnh báo:

[Obsolete]
private static void SomeMethod()

Bạn nhận được một cảnh báo khi bạn sử dụng nó:

Cảnh báo lỗi thời được hiển thị

Và với IntelliSense:

Cảnh báo lỗi thời với IntelliSense

Nếu bạn muốn một tin nhắn:

[Obsolete("My message")]
private static void SomeMethod()

Đây là mẹo công cụ IntelliSense:

IntelliSense hiển thị thông báo lỗi thời

Cuối cùng, nếu bạn muốn sử dụng bị gắn cờ là lỗi:

[Obsolete("My message", true)]
private static void SomeMethod()

Khi sử dụng, đây là những gì bạn nhận được:

Phương thức sử dụng được hiển thị là một lỗi

Lưu ý: Sử dụng tin nhắn để nói với mọi người những gì họ nên sử dụng thay vì lý do tại sao nó đã lỗi thời.


66

Thêm một chú thích cho phương thức bằng cách sử dụng từ khóa Obsolete. Đối số tin nhắn là tùy chọn nhưng một ý tưởng tốt để truyền đạt lý do tại sao mục này hiện đã lỗi thời và / hoặc sử dụng cái gì để thay thế.
Thí dụ:

[System.Obsolete("use myMethodB instead")]
void myMethodA()

36

Với ObsoleteAttributebạn có thể hiển thị các phương pháp không dùng nữa. Thuộc tính lỗi thời có ba hàm tạo:

  1. [Obsolete]: là một hàm tạo không có tham số và là mặc định sử dụng thuộc tính này.
  2. [Obsolete(string message)]:trong định dạng này, bạn có thể nhận được messagelý do tại sao phương pháp này không được chấp nhận.
  3. [Obsolete(string message, bool error)]:trong định dạng này, thông báo rất rõ ràng nhưng errorcó nghĩa là, trong thời gian biên dịch, trình biên dịch phải hiển thị lỗi và gây ra lỗi biên dịch hay không.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.