Rumah >pembangunan bahagian belakang >C++ >Mengapa C# Mengeluh Tentang Mengisytiharkan Semula Pembolehubah dalam Skop Berbeza?
Skop pembolehubah C#: mengapa pengkompil mengelirukan 'x'?
Coretan kod C# berikut:
<code class="language-csharp">if (true) { string var = "VAR"; } string var = "New VAR!";</code>
Mengisytiharkan pembolehubah 'var' untuk kali kedua dalam skop luar akan menimbulkan ralat berikut:
Ralat 1: Pembolehubah tempatan bernama 'var' tidak boleh diisytiharkan dalam skop ini kerana ia akan mempunyai makna yang berbeza daripada 'var' yang sudah digunakan untuk mewakili sesuatu yang lain dalam skop "anak".
Ralat ini berlaku kerana C# menguatkuasakan peraturan skop yang ketat yang menghalang pembolehubah dengan nama yang sama daripada diisytiharkan semula dalam skop bertindih. Walaupun pengisytiharan 'var' pertama terhad kepada skop dalaman dan nampaknya tidak mempunyai kesan pada skop luar, pengkompil menganggap kedua-dua kejadian sebagai berada dalam skop yang sama.
Masalahnya berpunca daripada batasan reka bentuk pengkompil. Ia menganalisis pembolehubah berdasarkan skopnya semata-mata, tanpa mengira susunan di mana ia diisytiharkan atau digunakan. Jadi, kod yang sah secara teori berikut:
<code class="language-csharp">string var = "New VAR!"; if (true) { string var = "VAR"; }</code>
Pengkompil juga menganggapnya tidak sah.
Untuk menyelesaikan kekaburan ini, disyorkan untuk menggunakan nama pembolehubah yang berbeza atau menggunakan skop adik-beradik:
<code class="language-csharp">string varOuter = "New VAR!"; if (true) { string varInner = "VAR"; }</code>
Walaupun skop adik-beradik adalah sah dari segi teknikal, ia boleh mengelirukan dan biasanya tidak disyorkan. Sebagai alternatif, adalah amalan yang lebih baik untuk menamakan semula pembolehubah, yang membantu membezakan pembolehubah daripada skop yang berbeza.
Atas ialah kandungan terperinci Mengapa C# Mengeluh Tentang Mengisytiharkan Semula Pembolehubah dalam Skop Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!