2016-04-06 17 views
1

Ich habe ein Problem mit dem Verständnis von Code. Ich lerne Codierung in Unity, ich habe ein wirklich wenig Wissen über C#, aber etwas hat meine Aufmerksamkeit erregt - natürlich deklarieren wir zunächst die Variable int (ohne irgendeinen Wert zu setzen) und verwenden sie dann in der if-Anweisung.C# - Verwendung der Variablen vor der Initialisierung

Ich lese here, dass nicht initialisierte Variablen in C# nicht zulässig ist. Und ich habe es in einem anderen Projekt selbst überprüft. Ich dachte, es ist wegen der Struktur (nicht Klasse), aber ich habe keine Ahnung, warum es Auswirkungen auf Variablen hätte ...

Da gibt es eine Menge unnötigen Code ich werde es außerhalb (Pastebin) setzen server - Der Code mit dieser Variable wird als Kommentar gesetzt (zur besseren Sichtbarkeit).

Hier werde ich nur diese Fragmente (für Leute, die keine Zeit verschwenden wollen, durch ganze Unordnung gehen).

  1. private int questionsFinished;

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

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

Ich verstehe einfach nicht, warum es funktioniert - die Variable keinen Wert hat, nicht wahr? Danke Jungs im Voraus.

+0

Elementvariablen des Typs int werden automatisch auf 0 initialisiert, wenn sie nicht explizit mit einem anderen Wert initialisiert werden. – user469104

+0

Was ist falsch an meiner Frage, so dass sie falsch ist? – Szkaplerny

Antwort

2

questionsFinished hat einen Wert - weil es ein Feld in Ihrer Klasse ist. Felder werden auf ihren Standardwert initialisiert, wenn Sie sie nicht explizit festlegen. In diesem Fall wird questionsFinished auf 0 initialisiert, da es ein int ist. Numerische Typen haben standardmäßig den Wert 0, bools den Wert false, Strings und Referenztypen standardmäßig den Wert null, Strukturen den Standardwert, abhängig von ihren Konstruktoren.

Unter Variablen versteht man lokale Variablen innerhalb Ihrer Methode.

Große Erklärung von Eric Lippert hier:

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

Im Wesentlichen - wenn Sie initialisiere nicht eine lokale Variable ist es sehr wahrscheinlich um einen Fehler zu sein, und die Compiler Dir heraus hilft. Felder mit ihrem Standardwert sind ein beliebter Fall, so dass der Compiler davon ausgeht, dass Sie dies absichtlich getan haben und keinen Bug auslösen.

+0

Dies ist eine genauere Antwort nach dem @ user469104 Kommentar.Nur kann hinzufügen, dass für Werttyp int Standardwert ist 0, wenn es Referenztyp war dann null – Vladimir

+0

Danke @Vladimir - aktualisiert – JimBobBennett

1

questionsFinished ist ein Feld, nicht eine lokale Variable, so dass es nicht Notwendigkeit initialisiert werden. Es ist jedoch eine gute Vorgehensweise, dies zu tun.

Im Allgemeinen kann der Compiler nicht deterministisch feststellen, ob ein Feld vor der Verwendung auf einen Wert gesetzt wird (da öffentliche Felder extern initialisiert werden können), sodass kein Fehler generiert wird.

Felder werden auf ihren Standardwert initialisiert, der 0 für int ist.

Verwandte Themen