apa perbedaan antara itu dan hanya membuat metode yang menerima daftar atau array?
Perbedaan antara
void M(params int[] x)
dan
void N(int[] x)
adalah M dapat disebut seperti ini:
M(1, 2, 3)
atau seperti ini:
M(new int[] { 1, 2, 3 });
tetapi N hanya bisa dipanggil dengan cara kedua , bukan cara pertama .
mungkin itu berdampak pada kinerja?
Dampaknya terhadap kinerja adalah apakah Anda menelepon M
dengan cara pertama atau cara kedua, baik cara Anda membuat array dibuat. Membuat array memiliki dampak kinerja karena membutuhkan waktu dan memori. Ingatlah bahwa dampak kinerja harus diukur terhadap sasaran kinerja; tidak mungkin bahwa biaya menciptakan array tambahan adalah faktor gating yang merupakan perbedaan antara keberhasilan dan kegagalan di pasar.
Saya tidak sepenuhnya mengerti atau melihat dengan cara apa Anda lebih suka yang dengan parameter tidak terbatas.
Ini murni dan sepenuhnya merupakan kemudahan bagi pembuat kode yang memanggil metode; hanya lebih pendek dan lebih mudah untuk ditulis
M(1, 2, 3);
alih-alih menulis
M(new int[] { 1, 2, 3 });
Ini hanya menghemat beberapa penekanan tombol di sisi pemanggil. Itu semuanya.
Beberapa pertanyaan yang tidak Anda tanyakan tetapi mungkin ingin tahu jawabannya:
Apa sebutan fitur ini?
Metode yang memungkinkan sejumlah variabel argumen untuk dilewatkan di sisi pemanggil disebut variadic . Metode Params adalah bagaimana C # mengimplementasikan metode variadic.
Bagaimana cara kerja resolusi berlebihan dengan metode variadic?
Ketika dihadapkan dengan masalah resolusi kelebihan beban, C # akan mempertimbangkan bentuk "normal" dan "diperluas", dan bentuk "normal" selalu menang jika keduanya berlaku. Sebagai contoh, pertimbangkan ini:
void P(params object[] x){}
dan kami memiliki panggilan
P(null);
Ada dua kemungkinan yang berlaku. Dalam bentuk "normal", kami memanggil P
dan meneruskan referensi nol untuk array. Dalam formulir "diperluas", kami menyebutnya P(new object[] { null })
. Dalam hal ini, bentuk normal menang. Jika kami menerima panggilan P(null, null)
maka formulir normal tidak dapat diterapkan dan formulir yang diperluas akan menang secara default.
Tantangan : Misalkan kita memiliki var s = new[] { "hello" };
dan menelepon P(s);
. Jelaskan apa yang terjadi di situs panggilan dan mengapa. Anda mungkin akan terkejut!
Tantangan : Misalkan kita memiliki keduanya void P(object x){}
dan void P(params object[] x){}
. Apa yang P(null)
dilakukan, dan mengapa?
Tantangan : Misalkan kita memiliki keduanya void M(string x){}
dan void M(params string[] x){}
. Apa yang M(null)
dilakukan, dan mengapa? Bagaimana ini berbeda dari kasus sebelumnya?