C # memiliki out
dan ref
kata kunci. Mengapa keduanya diperlukan? Penafian: Saya tidak memiliki pengetahuan mendalam tentang C #.
c#
parameters
keywords
Neo
sumber
sumber
ref
danout
? Atau apakah Anda bertanya apa penggunaan argumen referensiref
/out
dibandingkan dengan argumen nilai-(tidak ada pengubah ke parameter)? Atau keduanya?Jawaban:
Dari segi implementasi, mereka pada dasarnya adalah hal yang sama, tetapi
out
mengkomunikasikan sesuatu yangref
tidak: Anda tidak peduli tentang input. Ini berarti hal-hal tertentu bagi Anda dan perkakas. Misalnya, Anda bisa meneruskan variabel yang tidak diinisialisasi keout
parameter dan itu bukan masalah, di mana sebaliknya, dan dalam fungsi Anda diharuskan untuk menetapkan nilai keout
parameter sebelum kembali, sedangkan tidak ada persyaratan untuk melakukan apa pun di semua denganref
nilai.sumber
out
memberinya cara untuk melakukannya sehingga lebih cocok dengan bagaimana Anda ingin berurusan dengan variabel di tempat pertama.out
param karena fungsi yang menerimanya tidak akan membaca dari itu .Untuk memahami dua kata kunci ini, Anda harus memahami apa artinya memberikan nilai dengan referensi . Pada dasarnya itu berarti bahwa, jika Anda memodifikasi variabel parameter yang Anda berikan dalam metode atau fungsi, variabel itu mempertahankan nilai yang dimodifikasi ketika fungsi Anda keluar. Mendeklarasikan parameter sebagai
ref
atauout
menyelesaikan ini, sedangkan variabel parameter biasa akan mempertahankan nilai aslinya, bahkan jika Anda mengubahnya dalam fungsi.Satu-satunya perbedaan antara
ref
danout
adalah bahwaout
tidak mengharuskan Anda untuk menginisialisasi variabel sebelum Anda meneruskannya ke fungsi, tetapiref
tidak; sementaraout
memang mengharuskan Anda untuk menetapkan sesuatu ke variabel dalam fungsi, tetapiref
tidak.sumber
Kamu bertanya.
Dan jawabannya adalah bahwa mereka TIDAK DIBUTUHKAN, java misalnya tidak memiliki salah satu dan VB hanya memiliki ref (dan hanya membutuhkannya dalam deklarasi metode).
Anda dapat dengan mudah menulis seluruh program tanpa menggunakan keduanya.
Mereka ada karena mereka kadang berguna. Itulah sebabnya ada dua dari mereka dan bukan hanya satu - karena berguna untuk membuat perbedaan antara 'di sini adalah sesuatu, modifikasi jika Anda mau' dan 'berikan nilai baru pada benda ini'.
Bahasa lain memiliki prioritas yang berbeda dan mungkin juga tidak termasuk ini atau yang setara. Mereka bahkan mungkin tidak setuju apakah keduanya bermanfaat, dan karenanya dapat secara aktif memutuskan TIDAK untuk menerapkan satu atau yang lain.
sumber
Pada intinya keduanya
ref
danout
menyediakan mekanisme untuk meneruskan alamat variabel ke suatu metode sehingga dapat diperbarui - menugaskanref
atauout
parameter memperbarui variabel dalam konteks pemanggil. Perbedaannya ada pada jaminan:out
jaminan bahwa variabel akan diperbarui,ref
tidak.Dari sisi lain panggilan ada perbedaan yang sama. Sebuah
out
parameter untuk metode kami tidak dijamin mengandung sesuatu yang berguna pada saat kedatangan dan harus diatur ke nilai di beberapa titik, sementararef
parameter dapat diasumsikan memiliki nilai dan kita tidak perlu melakukan sesuatu yang spesifik dengan itu.Perbedaan ini berdampak pada analisis kode, pembangkitan, dan pengoptimalan yang, meskipun tidak terlalu jelas bagi kita sebagian besar waktu, dapat memiliki beberapa efek pada cara program kita pada akhirnya beroperasi. Pembuat kode dapat menunda alokasi variabel sampai segera sebelum panggilan, pengoptimal mungkin memutuskan dapat menyusun ulang beberapa operasi lebih efektif berdasarkan kontrak, dll.
Dalam hal penggunaan: sebagai aturan umum saya gunakan
out
untuk situasi di mana saya tidak peduli tentang konten variabel ketika tiba sebagai parameter danref
ketika saya melakukannya.sumber