Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
C# feature specifications