C # 7 secara mendalam: Meneroka fungsi tempatan

Sokongan untuk fungsi tempatan adalah ciri baru yang sangat baik yang telah diperkenalkan di C # 7. Perhatikan bahawa anda dapat menentukan fungsi tempatan di dalam kaedah apa pun, pembangun kelas atau di dalam harta benda - baik pengambil dan pengatur. Apabila disusun oleh penyusun C #, fungsi tempatan akan berubah menjadi kaedah peribadi.

Semasa mengembangkan aplikasi, anda mungkin perlu membuat kaedah yang tidak dapat digunakan kembali - anda memerlukannya hanya untuk modulariti. Anda mungkin tidak mahu kaedah anda lama kerana mengekalkan kaedah tersebut akan menjadi mimpi buruk dari masa ke masa. Namun, anda mungkin mempunyai banyak kaedah peribadi yang tidak akan digunakan kembali, bukan? Ciri baru di C # 7 ini dapat digunakan dalam keadaan seperti itu - anda boleh menentukan fungsi yang sesuai dengan ruang lingkup lain, atau boleh berada di dalam fungsi lain atau bahkan di dalam harta benda (baik pengambil maupun pengatur).

Bayangkan keadaan di mana anda memerlukan fungsi pembantu yang akan dipanggil sekali sahaja. Sebelum C # 7 berada, anda boleh mencapainya menggunakan jenis Func dan Action dengan kaedah tanpa nama. Namun, ada beberapa cabaran. Mereka tidak menyokong parameter generik, parameter dan ref dan out.

Dengan C # 7 di sekitar, anda kini dapat menyatakan fungsi tersebut di dalam badan fungsi yang lain. Fungsi sedemikian dikenali sebagai fungsi tempatan. Dengan kata lain, sokongan untuk fungsi tempatan membolehkan anda menentukan fungsi dalam ruang lingkup fungsi lain.

Melaksanakan fungsi tempatan di C #

Mari tulis beberapa kod dan lihat bagaimana fungsi tempatan berfungsi. Pertimbangkan coretan kod berikut. Perhatikan bahawa kaedah Sum ditentukan di dalam badan kaedah Utama dalam coretan kod yang berikut.

 static void Main(string[] args)

        {

            int Sum(int x, int y)

            {

                return x + y;

            }

            Console.WriteLine(Sum(10, 20));

            Console.ReadKey();

        }

Dalam contoh ini, kaedah Sum adalah fungsi tempatan - ia tempatan untuk kaedah Utama. Dengan kata lain, kaedah Sum boleh digunakan hanya di dalam kaedah Utama, iaitu kaedah di mana ia telah ditentukan.

Fungsi tempatan boleh mempunyai semua ciri kaedah biasa kecuali fungsi tempatan tidak boleh bersifat statis. Fungsi tempatan bahkan tidak segerak dan boleh mempunyai akses ke pemboleh ubah dari blok penutup juga. Parameter dan pemboleh ubah tempatan dari ruang lingkup lampiran dapat digunakan di dalam fungsi lokal, mirip dengan ungkapan lambda. Harus diingat bahawa pemboleh ubah tempatan yang ditangkap disalurkan ke fungsi tempatan dengan merujuk. Berikut adalah contoh lain yang menggambarkan bagaimana fungsi tempatan dapat mengakses pemboleh ubah jenis lampirannya.

public static void Display(string str)

        {

            int ctr = 5;

            DisplayText();

            void DisplayText ()

            {

                for(int i = 0; i < ctr; i++)

                Console.WriteLine(str);

            }

        }

Sekarang, rujuk coretan kod yang diberikan di atas. Kaedah Paparan mengandungi parameter rentetan dan pemboleh ubah integer di dalamnya. Perhatikan bahawa fungsi tempatan yang ditentukan dalam metode Display (bernama DisplayText) dapat memiliki akses ke pemboleh ubah lokal dan juga argumen metode Display. Ciri yang bagus, bukan?

Salah satu faedah utama fungsi tempatan adalah enkapsulasi - fungsi tempatan hanya boleh dipanggil dari jenisnya. Perhatikan bahawa jika anda mempunyai kaedah peribadi di kelas anda, mana-mana ahli kelas boleh menggunakan kaedah peribadi.