Senarai Pemahaman
Kod yang disediakan menunjukkan perangkap biasa apabila menggunakan jenis rujukan dengan senarai. Kelas Tag
, sebagai jenis rujukan, bermakna pembolehubah memegang rujukan kepada lokasi memori objek, bukan salinan objek itu sendiri.
Dalam gelung, tika _tag
yang sama berulang kali diubah suai. Setiap penambahan pada senarai tidak mencipta objek Tag
baharu; sebaliknya, ia menambah rujukan lain pada objek sama _tag
. Oleh itu, senarai akhir mengandungi berbilang rujukan yang menunjuk kepada terakhir keadaan diubah suai _tag
.
Mengapa Menggunakan struct
Menyelesaikan Masalah
Menukar public class Tag
kepada public struct Tag
menyelesaikan isu kerana struct ialah jenis nilai. Apabila struct diberikan, salinan data struct dibuat. Akibatnya, setiap lelaran gelung mencipta contoh _tag
bebas sepenuhnya. Pengubahsuaian pada satu kejadian tidak menjejaskan yang lain, menghasilkan senarai dengan objek Tag
unik.
Perkaitan Kelas Koleksi Terbitan
Masalahnya tidak wujud dalam reka bentuk kelas TagCollection
. Kelas TagCollection
itu sendiri kelihatan dilaksanakan dengan betul. Isu teras terletak pada cara contoh _tag
dikendalikan dalam gelung yang mengisi senarai, khususnya pengubahsuaian berulang bagi satu contoh jenis rujukan.
Atas ialah kandungan terperinci Mengapa Menambah Nilai Baharu pada Senarai Mengganti Nilai Sebelumnya Apabila Menggunakan Jenis Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!