Bagikan melalui


Atribut pada fungsi lokal

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 diabadikan dalam catatan rapat desain bahasa (LDM) terkait .

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

Edisi utama: https://github.com/dotnet/csharplang/issues/1888

Atribut

Deklarasi fungsi lokal sekarang diizinkan untuk memiliki atribut (§22). Parameter dan parameter jenis pada fungsi lokal juga diizinkan untuk memiliki atribut.

Atribut dengan arti tertentu saat diterapkan ke metode, parameternya, atau parameter jenisnya akan memiliki arti yang sama saat diterapkan ke fungsi lokal, parameternya, atau parameter jenisnya, masing-masing.

Fungsi lokal dapat dibuat kondisional dalam arti yang sama dengan metode kondisional (§22,5,3) dengan mendekorasinya dengan [ConditionalAttribute]. Fungsi lokal bersyarat juga harus static. Semua pembatasan pada metode kondisional juga berlaku untuk fungsi lokal kondisional, termasuk bahwa jenis pengembalian harus void.

Ekstern

Modifikator extern sekarang diizinkan pada fungsi lokal. Ini membuat fungsi lokal eksternal dalam arti yang sama dengan metode eksternal (§15.6.8).

Demikian pula dengan metode eksternal, isi fungsi lokal eksternal harus berupa titik koma. Titik koma badan fungsi lokal hanya diizinkan pada fungsi lokal eksternal.

Fungsi lokal eksternal juga harus static.

Sintaksis

§13.6.4, atau tata bahasa fungsi lokal dimodifikasi sebagai berikut:

local-function-header
    : attributes? local-function-modifiers? return-type identifier type-parameter-list?
        ( formal-parameter-list? ) type-parameter-constraints-clauses
    ;

local-function-modifiers
    : (async | unsafe | static | extern)*
    ;

local-function-body
    : block
    | arrow-expression-body
    | ';'
    ;