Các tham số "out" có phải là một điều xấu trong .NET không? Bất kỳ bài viết/thảo luận hay về chủ đề này?Các tham số "out" có phải là điều xấu trong .NET không?
Trả lời
Vâng, tôi có an article on what ref/out do - nhưng không thảo luận bạn có nên sử dụng chúng hay không.
Về cơ bản, các tham số out
thường là dấu hiệu cho thấy bạn muốn trả về hai kết quả một cách hiệu quả từ một phương thức. Đó là thường là mùi mã - nhưng có một số trường hợp (đáng chú ý nhất là với mẫu TryXXX) nơi bạn thực sự muốn trả lại hai mẩu thông tin vì lý do chính đáng và không có ý nghĩa gì nhiều khi đóng gói chúng lại với nhau.
Nói cách khác, tránh ra/ref nơi bạn có thể làm điều đó một cách dễ dàng, nhưng không đi ồ ạt ra khỏi con đường của bạn để tránh chúng.
Câu cuối cùng của bạn là lời khuyên tốt, vững chắc, thực dụng. –
Trong hầu hết các trường hợp, tôi khuyên bạn không nên sử dụng tham số Out. Về cơ bản, họ thêm các hiệu ứng phụ vào mã của bạn và có thể là một cơn ác mộng khi nói đến gỡ lỗi.
Có một bài viết trên MSDN về Out thông số có sẵn ở đây: http://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx
Tôi nghĩ rằng họ có thực sự hữu ích khi cần thiết.
Bài viết Msdn cho cả tham số ref và out.
Câu hỏi hay. Câu trả lời của tôi là tôi không đặc biệt thích chúng, nhưng tôi sử dụng chúng trong một trong các dự án của tôi, nơi nhiều giá trị trả về là phổ biến. Tôi có một thư viện dữ liệu tài chính trả về giá thực tế (hoặc null/zero), một mã lỗi chính và một mã lỗi nhỏ. Thư viện có hàng chục đến hàng trăm phương thức, và mỗi mã lỗi là một kiểu khác nhau, vì vậy việc tạo các lớp tùy chỉnh cho từng phương thức và trả về một thể hiện của nó sẽ rất khó sử dụng.
FxCop không nghĩ đó là một ý tưởng tốt ...
http://msdn.microsoft.com/en-us/library/ms182146(VS.80).aspx
Out thông số rất hữu ích khi bạn cần phải trả lại nhiều hơn một đối tượng như là kết quả của một hàm. Để đôi mắt của tôi,
void doSomeThing(Thing toDoItTo,
out OtherThing result1,
out AnotherThing result2)
{
...
}
OtherThing y;
AnotherThing z;
doSomeThing(x, out y, out z);
y.method1();
z.method2();
là sạch hơn rất nhiều so với
struct DoSomeThingResults
{
public OtherThing Result1;
public OtherThing Result2;
}
DoSomeThingResults doSomeThing(Thing toDoItTo)
{
...
}
DoSomethingResults results = doSomeThing(x);
results.Result1.method1();
results.Result2.method2();
và thêm vào đó, sử dụng ra các thông số có nghĩa là kết quả được đảm bảo để được giao.
Trong trường hợp không có bộ dữ liệu, đôi khi chúng là cách sạch nhất để làm việc. Tôi thường ghét họ, mặc dù.
F # có một số đường cú pháp đẹp để xử lý chúng. Thay vì làm cho tôi đối phó với các tham số out
, nó xử lý chúng như là các phương thức trả về các bộ dữ liệu thay thế. Các TryParse
phương pháp khác nhau kết thúc trở về hai tuples yếu tố:
let success, value = Int32.TryParse("1234")
(* success is true *)
(* value is 1234 *)
Đó là khá tiện dụng, và không làm cho tôi cảm thấy bẩn.
Tôi cũng thích đường này! – BuddyJoe
Đối với trường hợp cụ thể này, bạn có thể sử dụng Nullable
nó không phải là ở tất cả xấu để sử dụng Out
hãy thử precising những lợi ích:
using ref force us to initialize it so we are letting the ref variable to place in heap and consume some spaces .
in most cases we return null if the operation has some none logic conditions
but with Out we avoid consuming the heap and refspace
- 1. Out tham số trong C
- 2. Hiệu suất tham số C# out
- 3. Null out tham số trong C#?
- 4. Phải có các tham số mẫu phải không?
- 5. Các tham số hàm mặc định có phải là hằng số trong C++ không?
- 6. Các hàm được đánh mạnh có phải là các tham số có thể có trong TypeScript không?
- 7. Các ứng dụng có nhiều DLL là một điều xấu?
- 8. Có phải "xấu" khi sử dụng try-catch để kiểm soát luồng trong .NET không?
- 9. C# out tham số vs trả về
- 10. .Net WebServices và out/ref Đối số WebMethod
- 11. Có phải OleVariant có thể sử dụng cho tham số ngoài trong DLL proc không?
- 12. plpgsql: gọi hàm có 2 tham số OUT
- 13. Lỗi thay thế có phải là lỗi với các tham số mẫu không phụ thuộc không?
- 14. Làm việc với tham số "Out" trong JavaScript
- 15. CSS - Lợi nhuận là một điều xấu?
- 16. <value optimization out> trong gdb có phải là vấn đề không?
- 17. Bồi thường cho việc thiếu tham số 'out' trong các phương thức không đồng bộ.
- 18. Chạy ứng dụng .NET 32 bit trong hệ điều hành 64bit, có thực sự xấu không?
- 19. Java gán giá trị mới cho tham số, đây có phải là hành vi không tốt?
- 20. MVC là một điều xấu ở đâu?
- 21. Gọi là không có tham số rỗng
- 22. Tên bảng tham số trong .NET/SQL?
- 23. Xử lý ngoại lệ toàn chức năng trong C++ - đó có phải là kiểu xấu không?
- 24. Làm cách nào để gọi hàm không được quản lý có tham số char [] làm tham số OUT từ C#?
- 25. Tại sao không phải là hằng số tất cả trong trường hợp trên trong. Net?
- 26. Thiết kế giao diện WCF: không có tham số out hoặc ref
- 27. Tại sao các loại suy luận/tham số lambdas ẩn danh trên các tham số out/ref?
- 28. Tại sao các phương thức lặp lại không thể tham số 'ref' hoặc 'out'?
- 29. Là "nhập khẩu ngầm" luôn luôn là một điều xấu trong các gói Delphi?
- 30. WPF KeyGestures - Các phím không phải là chữ và số
Câu hỏi này có một cuộc thảo luận tốt: http://stackoverflow.com/questions/214688/why -does-the-net-framework-guidelines-recommend-that-you-dont-use-refout-argume – Brian