SORU
3 Kasım 2011, PERŞEMBE


Değişken için döngü içinde bildirilen yerel değişken mi?

C kullanıyorum# aşağıdaki fark oldukça uzun bir süre için ama

 public static void Main()
 {
     for (int i = 0; i < 5; i  )
     {

     }

     int i = 4;  //cannot declare as 'i' is declared in child scope                
     int A = i;  //cannot assign as 'i' does not exist in this context
 }

Neden 'ben' eğer benim bu isimde bir değişkeni bildirmek için izin vermiyor. blok dışında değerini kullanabilir miyim yani

Yineleyici değişken için döngü tarafından kullanılan sadece kapsamı içinde geçerli olduğunu düşündüm.

CEVAP
3 Kasım 2011, PERŞEMBE


Neden izin verilmiyor tanımlamak için bir değişken ile aynı adı hem de döngü olarak dış için-döngü çünkü değişkenlerin dış-geçerli kapsam içi-kapsam. Anlamı iki 'ben' değişkenleri içinde, eğer bu yasak olsaydı için döngü. olacağını

Bakın: MSDN Scopes

Özellikle:

Yerel bir değişkenin kapsamı, yerel değişken bildirimi bir ilan (Bölüm 8.5.1) Beyannamenin oluşur taşıdır.

ve

Yerel bir değişken bir ilan kapsamı için-başlatıcı bir için açıklama (Bölüm 8.8.3)-başlatıcı için gerekli bir durum. -yineleyici ve açıklama için bulunan deyim.

Ve ayrıca: Local variable declarations (C, Bölüm 8.5.1# belirtimi)

Özellikle:

Yerel bir değişkenin kapsamı, yerel değişken bildirimi bir ilan hangi bildiriminde oluşur bloğu.Bakın bir hatadır bu önündeki metinsel bir konumda yerel bir değişken için yerel değişken yerel değişken Bildiricisi.Bir kapsamında yerel değişken, derleme zamanı başka bir yerel bildirmek için bir hata olur değişken veya sabit aynı ada sahip.

(Vurgu benim.)

i iç döngü için, kapsamı için-döngü anlamına gelir. -Döngü için i dışarıda kapsamında ise tüm ana yöntemartıiçin döngü. Yani yukarıdaki göre geçersiz döngü içinde i iki oluşumu var.

Yapmak yasak nedeni int A = i; int i for döngü içinde kullanmak için kapsamlı olmasıdır. Böylece artık for döngünün dışında erişilebilir.

Bu sorunların her ikisi de gördüğünüz gibi ölçüm sonucu; ilk sayı (int i = 4;) for döngü kapsamında i iki değişken neden olacaktır. int A = i; kapsamı dışında olan bir değişken için erişim neden olacaktır oysa.

Bunun yerine ne yapabileceğini i tüm süreç kapsamlı olarak bildirin, ve sonra her iki yöntemi olarak için-döngü dahilinde kullanın. Bu da kural kesmemek.

public static void Main()
{
    int i;

    for (i = 0; i < 5; i  )
    {

    }

    // 'i' is only declared in the method scope now, 
    // no longer in the child scope -> valid.
    i = 4;

    // 'i' is declared in the method's scope -> valid. 
    int A = i;
}

EDİT:

C# derleyicisi elbette bu kod oldukça geçerli derlemek için izin vermek için değiştirilebilir. Bundan sonra tüm geçerli:

for (int i = 0; i < 5; i  )
{
    Console.WriteLine(i);
}

for (int i = 5; i > 0; i--)
{
    Console.WriteLine(i);
}

Ama gerçekten kod okunabilirliği için faydalı ve kod yazmak bakımı gibi olurdu

public static void Main()
{
    int i = 4;

    for (int i = 0; i < 5; i  )
    {
        Console.WriteLine(i);
    }

    for (int i = 5; i > 0; i--)
    {
        Console.WriteLine(i);
    }

    Console.WriteLine(i);
}

Hatalar burada potansiyeli düşün, 0 veya 4 i son baskı mı? Şimdi bu çok küçük bir örnek, oldukça kolay takip etmek ve izlemek ama çok daha az sürdürülebilir olduğunu ve kesinlikle farklı bir isimle i dış ilan okunabilir olması daha iyidir.

N. B:

Lütfen not, C#'kapsayan kurallar C 's scoping rules farklıdır. C değişkenleri sadece bloğun sonuna kadar ilan geldikleri yerden kapsamındadır. C kodu geçerli bir yapı .

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012
  • Top10Series

    Top10Series

    26 Kasım 2008