Artikel ini meneroka dengan mendalam kerumitan skop pembolehubah dalam C# dan menganalisis dua contoh kod untuk menerangkan soalan yang dibangkitkan oleh tingkah laku skop pembolehubah.
<code class="language-c#">public void MyMethod() { int i = 10; for (int x = 10; x < 20; x++) { int i = x; // Point1: 变量i在此处重新声明 object objX = new object(); // Point2: 变量objX在此处重新声明 } object objX = new object(); }</code>
Seperti yang dijangkakan, ralat dilaporkan di Point1 disebabkan pengisytiharan semula pembolehubah i di dalam gelung for. Ralat ini berpunca daripada peraturan asas yang tidak membenarkan pembolehubah dengan nama yang sama digunakan dalam ruang perisytiharan pembolehubah tempatan yang sama atau ruang perisytiharan pembolehubah tempatan bersarang.
Walau bagaimanapun, ralat pada Point2 boleh mengelirukan. Pembolehubah objX diisytiharkan di luar gelung for, tetapi pengkompil masih melaporkan ralat. Di sinilah konsep "pendakap tersirat" dimainkan.
Dalam C#, setiap gelung for dianggap disertakan dalam pendakap tersirat. Oleh itu, pembolehubah objX yang diisytiharkan di luar gelung for dianggap berada dalam skop badan gelung for. Memandangkan pembolehubah objX lain diisytiharkan dalam gelung for, ini melanggar peraturan yang menghalang penggunaan semula nama pembolehubah dalam skop yang sama.
<code class="language-c#">public void MyMethod() { for (int i = 10; i < 20; i++) { // ... } for (int i = 10; i < 20; i++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } }</code>
Dalam contoh kod 2, tiada lagi ralat pengkompil. Ini kerana setiap gelung for mempunyai set pendakap tersiratnya sendiri, mewujudkan skop berbeza untuk pembolehubah i dan objX dalam setiap gelung. Oleh itu, pembolehubah dengan nama yang sama hanya digunakan dalam skop terpencil bagi gelung masing-masing, tertakluk kepada peraturan skop pembolehubah.
Atas ialah kandungan terperinci Mengapa C# Melaporkan Ralat Skop Pembolehubah dalam Gelung Bersarang, dan Bagaimanakah 'Pendakap Halimunan' Mempengaruhi Perkara Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!