Pembolehubah tempatan C# tidak dimulakan: adakah ia benar-benar berbahaya?
Spesifikasi C# (bahagian 5.3) menyatakan bahawa sebarang pembolehubah mesti diberikan nilai sebelum digunakan. Peraturan ini konsisten dengan amalan C dan C tidak terurus yang mana timbunan tidak dikosongkan dan lokasi memori yang diberikan kepada penuding mungkin sewenang-wenangnya, menyebabkan masalah yang sukar dikesan.
Walau bagaimanapun, tidak seperti C dan C#, C# menggunakan persekitaran masa jalan terurus, yang menimbulkan persoalan sama ada nilai "tidak ditetapkan" sebenarnya wujud. Secara khusus, telah difikirkan bahawa jenis rujukan yang tidak dimulakan sentiasa menerima nilai nol, menghapuskan kemungkinan mengekalkan data daripada panggilan kaedah sebelumnya atau data rawak.
Untuk menjelaskan andaian ini, adalah penting untuk membezakan antara dua jenis pembolehubah dalam C#:
Jadi, persoalannya kekal: adakah pembolehubah tempatan diklasifikasikan sebagai tidak dimulakan, adakah ia benar-benar tidak dimulakan atau adakah ia mewarisi gelagat penugasan awal medan?
Jawapannya sebenarnya "ya". Semua pembolehubah tempatan, tanpa mengira keadaan tugasan awalnya, dimulakan oleh masa jalan. Oleh itu, keadaan lalai pembolehubah sentiasa boleh diperhatikan dalam penyahpepijat sebelum tugasan pertama. Selain itu, permulaan ini menghapuskan potensi isu dengan kutipan sampah dan memastikan pembolehubah tempatan tidak dianggap sebagai rujukan terurus tanpa permulaan yang betul.
Walaupun masa jalan secara teorinya dibenarkan untuk mengekalkan keadaan sampah awal pembolehubah tempatan, pelaksanaan sebenar menentukan bahawa ia akan sentiasa mengosongkan memori pembolehubah tempatan kepada nilai lalainya. Pensifaran agresif ini memastikan penggunaan tidak sah bagi pembolehubah tempatan yang tidak ditetapkan disekat sebagai ralat penyusunan, sekali gus menghalang potensi pepijat.
Atas ialah kandungan terperinci Adakah Pembolehubah Tempatan C# Tidak Dimulakan Benar-benar Berbahaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!