sự khác biệt giữa điều đó và chỉ tạo ra một phương thức nhận danh sách hoặc mảng?
Sự khác biệt giữa
void M(params int[] x)
và
void N(int[] x)
M có thể được gọi như thế này không:
M(1, 2, 3)
hoặc như thế này:
M(new int[] { 1, 2, 3 });
nhưng N chỉ có thể được gọi theo cách thứ hai , không phải cách thứ nhất.
có lẽ nó có một số tác động trong hiệu suất?
Tác động đến hiệu suất là cho dù bạn gọi M
theo cách thứ nhất hay cách thứ hai, dù bằng cách nào bạn cũng có được một mảng được tạo. Tạo một mảng có tác động hiệu suất vì nó tốn cả thời gian và bộ nhớ. Hãy nhớ rằng các tác động hiệu suất nên được đo lường dựa trên các mục tiêu hiệu suất; không chắc rằng chi phí tạo ra một mảng bổ sung là yếu tố gating là sự khác biệt giữa thành công và thất bại trên thị trường.
Tôi không hoàn toàn hiểu hoặc nhìn theo cách bạn thích cái có thông số không giới hạn.
Nó hoàn toàn và hoàn toàn thuận tiện cho tác giả của mã đang gọi phương thức; nó chỉ đơn giản là ngắn hơn và dễ viết hơn
M(1, 2, 3);
thay vì viết
M(new int[] { 1, 2, 3 });
Nó chỉ lưu một vài tổ hợp phím bên phía người gọi. Đó là tất cả.
Một vài câu hỏi bạn không hỏi nhưng có lẽ muốn biết câu trả lời:
Tính năng này được gọi là gì?
Các phương thức cho phép một số lượng đối số khác nhau được truyền vào phía người gọi được gọi là matrixdic . Các phương thức Params là cách C # thực hiện các phương thức matrixdic.
Làm thế nào để giải quyết quá tải làm việc với một phương pháp matrixdic?
Khi gặp vấn đề về độ phân giải quá tải, C # sẽ xem xét cả hai dạng "bình thường" và "mở rộng" và dạng "bình thường" luôn thắng nếu cả hai đều được áp dụng. Ví dụ, hãy xem xét điều này:
void P(params object[] x){}
và chúng tôi có một cuộc gọi
P(null);
Có hai khả năng áp dụng. Ở dạng "bình thường", chúng tôi gọi P
và chuyển một tham chiếu null cho mảng. Ở dạng "mở rộng", chúng tôi gọi P(new object[] { null })
. Trong trường hợp này, hình thức bình thường chiến thắng. Nếu chúng tôi có một cuộc gọi P(null, null)
thì hình thức bình thường là không thể áp dụng và hình thức mở rộng sẽ thắng theo mặc định.
Thách thức : Giả sử chúng ta có var s = new[] { "hello" };
và một cuộc gọi P(s);
. Mô tả những gì xảy ra tại trang web cuộc gọi và tại sao. Bạn có thể ngạc nhiên!
Thử thách : Giả sử chúng ta có cả void P(object x){}
và void P(params object[] x){}
. Làm gì P(null)
, và tại sao?
Thử thách : Giả sử chúng ta có cả void M(string x){}
và void M(params string[] x){}
. Làm gì M(null)
, và tại sao? Điều này khác với trường hợp trước như thế nào?