Penjelasan terperinci tentang tangkapan pembolehubah dalam penutupan C#
Pengenalan
Tangkapan pembolehubah ialah aspek asas dalam penutupan C# yang membenarkan penutupan mengakses pembolehubah yang ditakrifkan dalam skop penutupnya. Artikel ini menyelam lebih mendalam ke dalam tangkapan berubah-ubah, menjawab soalan khusus tentang cara ia berfungsi, jenis nilai berbanding tangkapan jenis rujukan dan tinju.
Cara pembolehubah setempat ditangkap
Tangkapan pembolehubah berlaku apabila ungkapan lambda atau kaedah tanpa nama mengakses pembolehubah tempatan dalam skop lampirannya. Walau bagaimanapun, mekanisme penangkapan yang tepat tidak jelas.
Untuk memahami perkara ini, mari kita pertimbangkan contoh mudah:
<code class="language-csharp">Action action = () => { Console.WriteLine(counter); }; int counter = 5;</code>
Dalam contoh ini, ungkapan lambda menangkap pembolehubah counter
dalam skop lampirannya. Untuk mencapai ini, pengkompil sebenarnya mencipta kelas tanpa nama, dipanggil kelas penutupan, yang menyimpan rujukan kepada pembolehubah yang ditangkap. Apabila ungkapan lambda dilaksanakan, ia mengakses pembolehubah yang ditangkap melalui kelas penutupan:
<code class="language-csharp">class ClosureClass { private int counter; public ClosureClass(int counter) { this.counter = counter; } public void Execute() { Console.WriteLine(counter); } }</code>
Dalam kes ini, kelas penutupan menyimpan rujukan kepada pembolehubah counter
dan menyediakan kaedah untuk mengaksesnya.
Jenis nilai dan jenis rujukan
Jenis pembolehubah yang ditangkap menentukan cara ia disimpan dalam kelas penutupan:
Membungkus
Tinju tidak terlibat semasa menangkap jenis nilai. Nilai yang ditangkap disimpan terus dalam kelas penutupan, dan pembolehubah asal boleh diubah suai tanpa menjejaskan nilai yang ditangkap.
Atas ialah kandungan terperinci Bagaimanakah Tangkapan Pembolehubah Berfungsi dalam Penutupan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!