Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Tangkapan Pembolehubah Berfungsi dalam Penutupan C#?

Bagaimanakah Tangkapan Pembolehubah Berfungsi dalam Penutupan C#?

Susan Sarandon
Lepaskan: 2025-01-12 21:16:44
asal
992 orang telah melayarinya

How Does Variable Capture Work in C# Closures?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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:

  • Jenis nilai: Nilai itu sendiri disimpan dalam kelas penutupan. Tiada operasi tinju atau unboxing yang terlibat.
  • Jenis rujukan: Rujukan kepada objek disimpan dalam kelas penutupan. Jika objek itu kemudiannya diubah suai, rujukan yang ditangkap akan mencerminkan perubahan tersebut.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan