Bagikan melalui


Fungsi anonim statis

Nota

Artikel ini adalah spesifikasi fitur. Spesifikasi berfungsi sebagai dokumen desain untuk fitur tersebut. Ini termasuk perubahan spesifikasi yang diusulkan, bersama dengan informasi yang diperlukan selama desain dan pengembangan fitur. Artikel ini diterbitkan sampai perubahan spesifikasi yang diusulkan diselesaikan dan dimasukkan dalam spesifikasi ECMA saat ini.

Mungkin ada beberapa perbedaan antara spesifikasi fitur dan implementasi yang selesai. Perbedaan tersebut tertuang dalam catatan terkait rapat desain bahasa (LDM) .

Anda dapat mempelajari lebih lanjut tentang proses untuk mengadopsi speklet fitur ke dalam standar bahasa C# dalam artikel tentang spesifikasi .

Masalah juara: https://github.com/dotnet/csharplang/issues/275

Ringkasan

Izinkan pengubah 'statis' pada lambda dan metode anonim, yang melarang pengambilan variabel lokal atau status instance dari lingkup yang menyertakannya.

Motivasi

Hindari mengambil status secara tidak sengaja dari konteks yang tertutup, yang dapat mengakibatkan retensi objek yang ditangkap secara tidak terduga atau alokasi tambahan yang tidak terduga.

Desain terperinci

Metode lambda atau anonim mungkin memiliki pengubah static. Pengubah static menunjukkan bahwa metode lambda atau anonim adalah fungsi anonim statis .

Fungsi anonim statis tidak dapat menangkap keadaan dari lingkup yang melingkupi. Akibatnya, lokal, parameter, dan this dari cakupan penutup tidak tersedia dalam fungsi anonim statis .

Fungsi anonim statis tidak dapat mereferensikan anggota instans dari referensi this atau base yang bersifat implisit atau eksplisit.

Fungsi anonim statis dapat mereferensikan anggota static dari ruang lingkup pembatas.

Fungsi anonim statis dapat mereferensikan definisi constant dari lingkup sekeliling.

nameof() dalam fungsi anonim statis dapat mereferensikan lokal, parameter, atau this atau base dari cakupan penutup.

Aturan aksesibilitas untuk anggota private dalam cakupan tertutup sama untuk fungsi anonim static dan non-static.

Tidak ada jaminan yang dibuat untuk apakah definisi fungsi anonim statis dipancarkan sebagai metode static dalam metadata. Ini diserahkan ke implementasi kompilator untuk mengoptimalkan.

Fungsi lokal non-static atau fungsi anonim dapat menangkap status dari fungsi anonim statis yang mengapit tetapi tidak dapat menangkap status di luar fungsi anonim statis yang mengapit.

Menghapus pengubah static dari fungsi anonim dalam program yang valid tidak mengubah arti program.