2010-10-25 25 views

Trả lời

23

Câu trả lời ngắn:

Bạn sẽ cần phải tạo ra một nethod mới với chữ ký mới, và đánh dấu sự hiện như lỗi thời.

Còn câu trả lời

gì bạn muốn tránh bằng mọi giá là một đột phá mã! Sau đó, đặc biệt trong khung công ty, bạn muốn quảng cáo rằng phương pháp của bạn sẽ không còn được hỗ trợ nữa, nhưng bạn không muốn chịu trách nhiệm về các giải pháp tùy thuộc sự cố do kiến ​​trúc hoặc quyết định thiết kế hoặc bên cạnh bạn, phải không?

Lớp học ObsoleteAttribute sẽ thực hiện thủ thuật cho bạn.

Khi một thành viên lớp được đánh dấu là lỗi thời, một cảnh báo sẽ được nâng lên ở phía máy khách, người dùng khung của bạn, tiếp tục theo cách đó hoặc thậm chí một đồng nghiệp của bạn trong cùng một dự án.

public class MyClass { 
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.")] 
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    } 

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    } 
} 

Điều này sẽ quảng cáo rằng MyMethod không còn được hỗ trợ trong suốt người dùng mã của bạn.

Sau một khoảng thời gian nhất định, đủ để cho phép mọi người thay đổi mã của họ, bạn có thể yêu cầu thuộc tính này gửi thông báo lỗi khi phương pháp lỗi thời của bạn vẫn được sử dụng trong mã.

public class MyClass { 
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.", true)] 
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    } 

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    } 
} 

Bằng cách đặt các tham số constructor ObsoleteAttribute lớp thứ hai để true, bạn tel trình biên dịch để quảng cáo việc sử dụng phương pháp này như một lỗi.

Chỉ sau một thời gian, bạn hoàn toàn có thể xóa phương thức khỏi mã của mình để làm sạch nó một chút. Đây là một phần của các phương pháp tái cấu trúc được khuyến khích bởi phương pháp phát triển phần mềm Agile.

Điều này có hữu ích không?

+0

+1 để có câu trả lời cạnh tranh hơn và đánh vần các bước. Nhiều thông tin hơn câu trả lời của Steves – Gorgen

6

Có. Bạn chỉ có thể mark types and members of types as obsolete, không phải thông số riêng lẻ. Tuy nhiên, bạn có thể, quá tải phương thức, do đó giữ nguyên tên và đánh dấu tên cũ là lỗi thời:

class Act 
{ 
    [Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)] 
    public void DoSomething(int i, int j) 
    { 
    } 

    public void DoSomething(int i) 
    { 
    } 
} 
2

Tôi nghĩ cách tốt nhất là tạo phương pháp mới.

Bạn có ý gì khi tạo tham số lỗi thời? Điều này có phụ thuộc vào một giá trị cụ thể cho đối số đó không? Khi bạn gọi một phương thức, bạn luôn phải xác định đối số.

7

Có, tôi nghĩ cách duy nhất là tạo phương thức mới không có tham số và đánh dấu phương thức gốc với ObsoleteAttribute.

+0

+1 Tuyệt đối! =) –

7

Với thuộc tính Obsolete:

[Obsolete("Please use void AnotherMethod() instead", false)] 
void SomeMethod(Int32 data){ 
} 

Các Boolean trong các thuộc tính cho trình biên dịch để tạo ra một cảnh báo, nếu bạn thay đổi nó là true trình biên dịch sẽ tạo ra một lỗi. Xem here để biết tài liệu về nó.

+0

+1 Đó là cách tốt nhất để đi! =) –

+0

Có thể thực hiện điều này mà không đánh dấu toàn bộ phương thức là lỗi thời hay không? – Brian

+1

Không, như các câu trả lời khác (chẳng hạn như Chris Wallis), thông số không phải là mục tiêu cho thuộc tính ObsoleteAttribute. –

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