2016-04-06 24 views
1

Kodu anlama konusunda sorun yaşıyorum. Unity'de kodlamayı öğreniyorum, C# hakkında çok az bilgim var ama dikkatimi çeken bir şey var - tabii ki öncelikle değişken int (herhangi bir değer belirlemeden) belirliyoruz ve sonra if ifadesinde kullanıyoruz.C# - Başlatmadan önce değişkeni kullanma

C# 'de başlatılmamış değişkenlerin kullanılmasına izin verilmediğinden hereokunuyorum. Ve başka bir projede kendi başıma kontrol ettim. Ben yapı (sınıf değil) yüzünden olduğunu düşünüyordum ama neden değişkenler üzerinde etkisi olacağını hiçbir ipucu yok ...

Çok fazla gereksiz kod var çünkü ben dışarı koyacağım (pastebin) server - Bu değişken ile kod, yorum olarak ayarlanır (daha iyi görünürlük için).

Burada sadece bu parçaları koyacağım (zamanın tamamını karıştırmak istemeyen insanlar için).

  1. private int questionsFinished;

  2. [...] if(questionsFinished < questionNumbersChoosen.Length - 1) { moveToNextQuestion(); questionsFinished++; }

  3. public void moveToNextQuestion() { assignQuestion(questionNumbersChoosen[questionNumbersChoosen.Length - 1 - questionsFinished]); }

işe yarıyor Sadece neden anlamıyorum - değişken değeri yoktur, değil mi? Teşekkürler çocuklar önceden. sıfırlanması gereken ihtiyaç yapar böylece

+0

Tür int üye değişkenleri, – user469104

+0

açık bir şekilde başka bir değere başlatılmamışsa otomatik olarak 0 olarak başlatılır, bu nedenle sorun nedir? – Szkaplerny

cevap

2

questionsFinished değeri var, çünkü sınıfınızda bir alan var. Açık bir şekilde ayarlamadığınız sürece alanlar varsayılan değerlerine sıfırlanır. Bu durumda sorularFinished bir int olduğu gibi 0 olacak. Sayısal değerler 0'a, yanlışlara, dizelere ve varsayılan olarak null olarak belirtilen referans türlerine bağlanır, yapıcılarına bağlı olarak varsayılan değerlerine göre yapılandırılır.

Değişkenler, yönteminizin içindeki yerel değişkenleri ifade eder. Burada Eric Lippert dan

Büyük açıklama:

Why do local variables require initialization, but fields do not?

Esasen - Eğer bir hata olma ihtimali en yüksek olan bir yerel değişken başlatmak yoktur ve derleyici size yardımcı oluyor eğer. Varsayılan değerlerine sahip olan alanlar popüler bir durumdur, bu yüzden derleyici bunu sizin amaçla yaptığınızı varsayar ve bir hata oluşturmaz.

+0

Bu, @ user469104 yorumundan sonra daha doğru bir yanıttır.Sadece değer türü int varsayılan değeri 0 için bu değer ekleyebilirsiniz, eğer referans tipi ise, o zaman null – Vladimir

+0

Teşekkür @Vladimir - güncellendi – JimBobBennett

1

questionsFinished, bir alan, yerel değil değişkendir. Ancak bunu yapmak iyi bir uygulamadır.

Genelde derleyici, bir alanın kullanımdan önce bir değere ayarlanıp ayarlanmayacağını belirler (genel alanlar dışsal olarak başlatılabilir), dolayısıyla bir hata oluşturmaz.

int için 0 olan alanlar varsayılan değerlerine başlatılır.

İlgili konular