2016-07-19 6 views
0

Ich arbeite an einer Anwendung, die sich mit Listen beschäftigt. Ich habe zwei Skripte; eine, die sich mit einer bestimmten Klasse befasst; und der zweite, der sich um alles andere in der Anwendung kümmert. Es ist ein Wahres und Falsches Spiel/App, das ich durch ein Online-Tutorial lerne.Wie beziehen sich "Fragen" in der Liste <Questions> auf "T" in der Liste <T>?

Das erste Skript ist ein [System.Serializable] -Skript, das nur eine Zeichenfolge und eine Bool enthält. Die Zeichenfolge ist hier die Frage und der Bool verifiziert die Frage. Das Haupt-Game-Controller-Skript macht ein Array aus der Klasse heraus, es enthält auch eine Liste von unbeantworteten Fragen, die periodisch aktualisiert werden, sobald die Frage gestellt wurde.

Die Linie der Code, den ich nicht ganz bekommen, ist

private static List<Questions> UnansweredQuestions; 

Wo „Fragen“ ist die Klasse, die Frage und die Bool enthält.

Welche Funktion genau dient die <Questions>. Ich weiß, dass das T in List<T> auf den Typ der Elemente in der Liste verweist; die normalerweise string oder int sind. Wie wird T als Klasse definiert? Wenn die Klasse Questions eine Zeichenfolge und einen Bool enthält, bedeutet das, dass die erstellte Liste ein Wörterbuch ist?

+0

Ich bin mir nicht sicher, ob ich wirklich verstehe, was Sie meinen, aber eine Liste kann eine Liste von allem sein, einschließlich benutzerdefinierter Klassen (z. B. Fragen). Jetzt ist die Liste einfach eine Tasche, in dieser Tasche können Sie Bälle, Münzen oder sogar andere kleinere Taschen haben, die andere Gegenstände enthalten. –

+0

@Ghasan Nicht zu verwechseln mit 'System.Collections.Concurrent.ConcurrentBag ' (obwohl sie ähnlich sind) –

+0

@PCLuddite Danke! Ich bezog mich auf das Konzept davon, aber schön zu wissen, dass es eine Klasse mit solch einem Namen gibt :) –

Antwort

1

Lassen Sie uns diese brechen

private static List<Questions> UnansweredQuestions; 

Der Zugriffsmodifikator private bedeutet, dass UnansweredQuestions wird nur im Rahmen der Klasse sichtbar sein es in definiert ist.

Das Schlüsselwort static bedeutet, dass Sie dies nicht tun brauche eine Instanz deiner Klasse. Dieselbe UnansweredQuestions ist für alle Instanzen Ihrer Klasse und für andere statische Eigenschaften/Methoden in der Klasse sichtbar.

Was genau funktioniert die Funktion. Ich weiß, dass die T in List sich auf den Typ der Elemente in der Liste bezieht; die normalerweise string oder int sind.

List<T> bedeutet eine Liste eines Typs, der später benannt werden soll. Wenn Sie List<Questions> schreiben, benennen Sie diesen Typ. Sie sagen dem Compiler, dass Sie eine Liste mit Fragenobjekten haben möchten.

Da die Klasse Questions eine Zeichenfolge und eine Bool enthält, bedeutet das, dass die erstellte Liste ein Wörterbuch ist?

Nein, es ist wirklich eine Liste. Wenn Sie mindestens ein Objekt in der Liste haben, könnten Sie so etwas wie tun

Questions firstQuestion = UnansweredQuestions[0]; 
if (firstQuestion.Answered == false) 
{ 
    Console.WriteLine(firstQuestion.Text); 
} 

Dies setzt voraus, Ihre boolean beantwortet und Ihre Frage Text genannt wird, ist Text genannt.

+0

Ich liebe diese Seite schon :) arbeite immer noch daran zu glauben, wie hilfreich es tatsächlich ist. Sprich hypothetisch, wenn ich einen Konstruktor hätte, der einen String und ein int (basierend auf zwei Argumenten) definiert und die Liste mit diesen füllt, würde er Konstruktoren als Elemente der Liste akzeptieren? – BowieSalvatore

+0

@BowieSalvatore Wenn durch "Konstruktoren akzeptieren" meinst du so etwas wie "UnanswerQuestions.Add (neue Frage (" Wie geht es dir? ", 3));', dann ja. –

+0

Auch wenn Sie keinen Konstruktor mit zwei Argumenten hatten, können Sie folgende Syntax verwenden: 'UnansweredQuestions.Add (new Question() {Text =" Wie geht es Ihnen? ", Beantwortet = false});' –

2

Nein, List<Question> ist kein Wörterbuch. Es ist eine List, die Question s enthält.

List<T> als generisch bedeutet, dass es jeden Typ annehmen kann. Der Compiler übernimmt im Wesentlichen den Code von List und ersetzt alle Instanzen von T durch Question, genauso, als wäre er speziell als Liste für Question Typen geschrieben worden.

In seinem Kern speichert Elemente in einem Array, wie private T[] _items. Dieses Array wird dann immer dann skaliert, wenn der Speicherplatz knapp wird.

1

Referenz: https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

Betrachten Sie es als mehrere T-Shirts. Ähnlich wie Array<T>. T kann jede Art sein: int, string, Frageklasse, etc. Für Ex:

Question question1 = new Question(); // only 1 question 

List<Question> questions = new List<Question>(2); 
questions.Add(new Question()); // 1st question added 
questions.Add(new Question()); // 2nd question added 

// access the second question by: 
Question secondQuestion = questions[1]; 
0

Die <T> ist ein object, das ist die Basis von allem, was wie diese List<System.Object> ist. Wenn Sie List<string> deklarieren, erstellt es eine Liste mit der Klasse System.String.

Dieser Code: private static List<Questions> UnansweredQuestions;, erstellt eine Liste mit der Klasse Question.

Also dieser Code:

private static List<Question> UnansweredQuestions = new List<Question>(10); 

Erstellt eine 10 lange Liste, die Question Klasse. Welches ist wie ein Array:

private static Question[] UnansweredQuestions = new Question[10]; 

List 's und Array' s Raum und Zeit sparen, so dass Sie so etwas wie diese verwenden müssen nicht:

private static Question UnansweredQuestion1 = new Question(); 
private static Question UnansweredQuestion2 = new Question(); 
private static Question UnansweredQuestion3 = new Question(); 
private static Question UnansweredQuestion4 = new Question(); 
private static Question UnansweredQuestion5 = new Question(); 
private static Question UnansweredQuestion6 = new Question(); 
private static Question UnansweredQuestion7 = new Question(); 
private static Question UnansweredQuestion8 = new Question(); 
private static Question UnansweredQuestion9 = new Question(); 
private static Question UnansweredQuestion10 = new Question(); 

Plus-List ‚s und Array erlauben Indexierung, so können Sie einen Artikel wie diesen erhalten MyListOrArray[4]. Das gibt den Artikel bei diesem Index zurück. Während im obigen Beispiel, wo es 10 Variablen gibt, müssten Sie die Werte von ihnen einzeln erhalten, wie dies UnansweredQuestion4.