Saya tahu int adalah tipe nilai, tetapi apa itu array tipe nilai? Jenis referensi? Jenis nilai? Saya ingin meneruskan array ke fungsi untuk memeriksa sesuatu. Haruskah saya meneruskan array, karena itu hanya akan meneruskan referensi itu, atau haruskah saya meneruskannya sebagai ref?
124
Jawaban:
https://msdn.microsoft.com/en-us/library/bb985948.aspx
sumber
Tes paling sederhana untuk tipe referensi vs. tipe nilai adalah tipe referensi bisa
null
, tapi tipe nilai tidak bisa.sumber
Array (bahkan tipe nilai seperti int) adalah tipe referensi di C #.
http://msdn.microsoft.com/en-us/library/aa288453(VS.71).aspx :
sumber
Pertama saya ingin memberi tahu Anda bahwa Array adalah tipe referensi. Mengapa? Saya menjelaskan melempar satu contoh di sini.
Contoh:
Juga tipe referensi bisa nol sedangkan tipe nilai tidak bisa.
tipe nilai yang disimpan di Stack dan tipe referensi yang disimpan di Heap
Anda dapat mengirimkan array ke fungsi menggunakan out atau ref. Hanya metode inisialisasi yang berbeda.
lebih..
sumber
Uji untuk memverifikasi apakah itu referensi atau tipe nilai:
Anda dapat mengujinya secara online: https://dotnetfiddle.net/UWFP45
sumber
Array itu sendiri adalah tipe referensi. Nilai dari array itu adalah tipe nilai atau referensi seperti yang ditentukan oleh tipe data array. Dalam contoh Anda, array adalah tipe referensi dan nilainya adalah tipe nilai.
Semua larik berdimensi tunggal diimplementasikan secara implisit
IList<T>
, di mana<T>
tipe datanya adalah larik. Anda dapat menggunakan antarmuka tersebut sebagai tipe data dari parameter metode Anda. Anda juga bisa menggunakanIEnumerable<T>
untuk tipe data. Dalam kedua kasus (atau bahkan jika Anda hanya menggunakanint[]
) Anda tidak perlu meneruskannya secara eksplisit sebagairef
parameter.sumber
// Referensi ke array diteruskan oleh nilai. Ini adalah sumber kebingungan :-) ...
sumber
Array selalu merupakan tipe referensi. Tidak masalah array akan berisi tipe nilai seperti int atau tipe referensi seperti string. Saat Anda mendeklarasikan array misalnya
int[] integers=new int[10]
;Variabel integers itu sendiri hanya berisi referensi ke array yang akan ditempatkan di heap.
Juga ada banyak orang yang menyebutkan bahwa Anda dapat membedakan tipe nilai dari tipe referensi hanya bergantung pada fakta bahwa variabel itu bisa nol atau tidak. Saya ingin menyebutkan bahwa dalam c # jenis nilai saat ini juga bisa menjadi null
misalnya
dan itu bukan cara yang baik untuk mengidentifikasi jenisnya adalah referensi atau nilai hanya bergantung pada variabel fakta bisa menjadi nol atau tidak.
sumber
Sedikit wawasan:
Misalnya,
int
mewakili satu bilangan bulat,int[]
mewakili larik bilangan bulat.Untuk menginisialisasi array dengan dimensi tertentu, Anda dapat menggunakan
new
kata kunci, memberikan ukuran dalam tanda kurung siku setelah nama jenis:Semua array adalah tipe referensi dan mengikuti semantik referensi. Karenanya, dalam kode ini, meskipun elemen individual adalah tipe nilai primitif,
integers
array adalah tipe referensi. Jadi jika nanti Anda menulis:ini hanya akan menetapkan seluruh salinan variabel untuk merujuk ke array yang sama, itu tidak akan membuat array baru.
Sintaks array C # bersifat fleksibel, ini memungkinkan Anda untuk mendeklarasikan array tanpa menginisialisasi mereka sehingga array tersebut dapat diukur secara dinamis nanti dalam program. Dengan teknik ini, pada dasarnya Anda membuat referensi null dan kemudian mengarahkan referensi tersebut ke bentangan lokasi memori yang dialokasikan secara dinamis yang diminta dengan
new
kata kunci:Terima kasih.
sumber