2012-12-26 26 views
5

Tôi đã có một cái nhìn tại Path.Combine và nhận thấy nó có bốn quá tải:Một số quá tải cho phương pháp với "params" từ khóa

  1. string, string
  2. string, string, string
  3. string, string , string, string
  4. params string[]

Ba lần tải đầu tiên hữu ích như thế nào?
Cách tôi nhìn thấy, sự quá tải thứ tư khiến những người khác khá vô nghĩa. Tôi đã xem xét mã nguồn và tôi thấy rằng việc thực hiện quá tải thứ tư có một chút khác biệt, nhưng ngay cả trong trường hợp này, tôi sẽ chỉ có một sự quá tải params quyết định việc triển khai thực hiện dựa trên độ dài của mảng.

+0

Vâng, 'Kết hợp (Chuỗi, Chuỗi)' có khả năng tương thích ngược (các phiên bản trước 4 không có bất kỳ sự quá tải nào khác). – Oded

+0

Như tôi đã hiểu, quá tải không tham số cho phép bạn bỏ qua chi phí tạo mảng tham số và trình lặp đối số. Tuy nhiên, tôi không nhớ mình đã đọc ở đâu, vì vậy tôi đang bình luận hơn là trả lời. – phoog

+0

@phoog - có ý nghĩa. Hầu hết các ứng dụng sẽ cần phải kết hợp tối đa 4 phần đường dẫn. – Oded

Trả lời

5

Theo câu trả lời này, https://stackoverflow.com/a/2796763/385844, đó là tránh chi phí tạo mảng tham số và do quá tải không thuận tiện cho người dùng ngôn ngữ không hỗ trợ danh sách tham số có độ dài thay đổi.

cũng

1

Cũng giống như Oded nói, tôi phát hiện ra rằng nó phải có được ở đó để tương thích ngược như tôi không thể tìm thấy nó trong 2,0, 3,5

tôi nghĩ rằng quá tải bắt đầu trong 4.0

  • Path.Combine 4.0 - Nếu bạn nhìn vào điều hướng bên phải, bạn sẽ thấy tình trạng quá tải

Đối với nhiều quá tải khác, tôi sẽ không nói cho .net team, nhưng tôi cảm thấy họ cảm thấy vô nghĩa khi tăng quá tải mỗi thời gian để họ dừng lại ở 4 và cung cấp một mảng của chuỗi trong hơn 4 tổ hợp chuỗi - mà tôi nghĩ là khôn ngoan

tôi dựa lời giải thích của tôi trên biểu Lambda nơi đội dừng lại ở 16 đối số

Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

Path.Combine có thể đã như thế nhưng vô nghĩa.

+1

Có, nhưng nó không giải thích 3 và 4 chuỗi quá tải (đặc biệt kể từ khi quá tải mảng params được thêm vào cùng một lúc). – Oded

+0

@Oded Xem cập nhật của tôi. Hy vọng đang đi đúng hướng? – codingbiz

+2

Điều 'Hành động' khác, hiện tại không có cách nào cho định nghĩa chung' params'. – SWeko

0

Tôi chỉ có thể nói chuyện Xem từ kinh nghiệm của tôi với nhà phát triển C# khác.

Không phải tất cả nhà phát triển đều quen thuộc hoặc thoải mái với cú pháp params (và thực tế là tên kỹ thuật là Thông số hàm variadic không giúp ích).
Tôi biết tôi đã phải giải thích nó hơn và hơn nữa, vì vậy nó không phải là bất thường để xem các cuộc gọi

instance.ParamsMethod(new int[]{1}); 
//or even 
instance.ParamsMethod(new List<int>{1}.ToArray()); 

cho một phương pháp bằng văn bản như:

ParamsMethod params int [] nguồn

public void () {}

phủ nhận tất cả đường cú pháp ngọt ngào của params (và sau đó một số).

Vì vậy, sở thích cá nhân của tôi là cung cấp trường hợp tham số 1 và 2 là quá tải, vì điều đó phần nào gây khó khăn hơn trong việc làm lộn xộn mã không cần thiết. Cuộc gọi chậm hơn một chút do chuỗi quá tải, nhưng nó giúp làm cho mã rõ ràng hơn.

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