Tôi muốn có thể giữ một C# API giống như bây giờ, nhưng đơn giản là không dùng một trong các tham số trong một cuộc gọi phương thức. Có thể làm như vậy, hay tôi cần phải tạo một phương thức mới mà không có tham số và đánh dấu phương thức gốc là lỗi thời?Làm thế nào tôi có thể đánh dấu một tham số cụ thể là lỗi thời/không được chấp nhận trong C#?
Trả lời
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?
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)
{
}
}
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ố.
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
.
+1 Tuyệt đối! =) –
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ó.
+1 Đó là cách tốt nhất để đi! =) –
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
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. –
- 1. Tôi có thể đánh dấu một chức năng không được chấp nhận trong Scala không?
- 2. Trong VB.NET, tôi có thể đánh dấu một hàm không được chấp nhận?
- 3. Cách đánh dấu một lớp là Không được chấp nhận?
- 4. Làm thế nào để đánh dấu một cái gì đó trong Qt là lỗi thời (không được chấp nhận)?
- 5. Tôi có thể có macro C chấp nhận số tham số không xác định không?
- 6. Làm thế nào để bạn đánh dấu mã là không được chấp nhận trong Go?
- 7. Làm thế nào tôi có thể nhận được tất cả các tham chiếu với Reflection + C#
- 8. Làm thế nào tôi có thể nhận được giá trị tham số ngữ cảnh trong jsp.?
- 9. Làm thế nào tôi có thể nhận được một tham chiếu đến một Fragment trong ViewPager?
- 10. Làm thế nào tôi có thể gọi một hàm của một DLL C++ chấp nhận một tham số kiểu stringstream từ C#?
- 11. C++ 0x lambda, làm thế nào tôi có thể chuyển như một tham số?
- 12. android: làm cách nào để đánh dấu ứng dụng của tôi là có thể gỡ lỗi?
- 13. Làm thế nào tôi có thể nhận được jsdoc để đánh dấu param của tôi như là một đối tượng jquery?
- 14. Làm thế nào tôi có thể đánh dấu một biểu mẫu/trường là "bẩn" nếu nó là dữ liệu?
- 15. Làm thế nào tôi có thể viết một mẫu hàm có thể chấp nhận một chồng hoặc một hàng đợi?
- 16. Làm thế nào tôi có thể nhận được chiều cao của một hàng cụ thể trong UITableView tôi
- 17. Phục hồi một thực thể được đánh dấu là EntityState.Delete?
- 18. Làm cách nào để đánh dấu một ô nếu có một từ cụ thể bên trong?
- 19. Mục tiêu-C, Làm thế nào tôi có thể nhận được giá trị của một UITextField?
- 20. Làm thế nào tôi có thể buộc mercurial chấp nhận một cam kết trống
- 21. Phương thức chấp nhận n Số tham số trong C#
- 22. Làm thế nào tôi có thể nhận được một loại véc tơ trong C#?
- 23. Làm thế nào tôi có thể nhận được enum để chứa một dấu gạch ngang (-)?
- 24. Làm thế nào tôi có thể nhận được các bit từ một chuỗi trong C#?
- 25. Chức năng C++ không chấp nhận thực hiện cụ thể
- 26. xsd: loại phần tử boolean chấp nhận "true" nhưng không chấp nhận "True". Làm thế nào tôi có thể làm cho nó chấp nhận nó?
- 27. Trong .net, biết số tuần làm thế nào tôi có thể nhận được ngày trong tuần?
- 28. Trong JavaScript, làm thế nào tôi có thể tạo một hàm với tham số tùy chọn?
- 29. Làm thế nào tôi có thể nhận được dấu thời gian hiện nay trong PHP
- 30. C#: làm thế nào để - ứng dụng đơn lẻ chấp nhận tham số mới?
+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