2014-01-19 9 views
7

In der Regel spielen Sie mit dem Erstellen von Spielen herum, aber ich nehme einen Umweg, indem ich eine kleine Frage und Antwort-App für Bildungszwecke mache.Antwortklasse eine Struktur machen?

Wie auch immer ich habe eine Frage Klasse, die zahlreiche Mitglieder enthält: die Frage selbst, die Antwort auf die Frage, eine Reihe von möglichen Antworten usw. Keine Zweifel, dies sollte eine Klasse sein.

Meine Antwort Klasse hält jedoch nur einen String, eine Enum und eine int-ID-Nummer wie folgt:

public class Answer 
{ 
    public string Answer { get { return answer;} private set { answer = value; } } 
    public Answer_Category = Some_Value; // The enum. 
    public int ID { get { return id; } private set { return id; } } 

    private string answer; 
    private int id; 
} 

Ok, so dass es zwei Saiten hält, auch der Ctor hat gewesen.

Also sollte ich dies eine Struktur machen? Ich frage, wie es vergleichbar erscheint, einen Vector zu einer Struktur zu machen, die so eine kleine Datenstruktur ist.

Da natürlich eine Frage und Antwort-Anwendung die Antwort-Klasse/Struktur wird das Thema einer Vielzahl von Suchanfragen sein.

IMO sollte dies eine Struktur sein - nur wegen der Größe der Struktur, habe nicht mit C für einige Zeit herum gespielt obwohl so nur auf der Suche nach etwas Klärung.

+0

Ich persönlich glaube, dass Entitäten immer eine Klasse sein sollten, es sei denn, es gibt einen wirklich guten Grund, sie zu Strukturen zu machen (was ich hier nicht sehe). Ich werde daran interessiert sein, die Antworten zu sehen. Vielleicht möchten Sie ein wenig mehr hinzufügen, wie die Entität in Ihrem Code verwendet wird ... – Liath

+0

ein guter Startpunkt für Ihre Entscheidung wäre die Microsoft-Richtlinien über Strukturen http://msdn.microsoft.com/en-us/library/ms229017(v=vs.110).aspx – fuchs777

+0

@ fuchs777 Ich habe durch was MS durchforstet muss auf Strukturen sagen, und es ist mit Widersprüchen z Vector2/Vector3 sind Strukturen in Xna, die Rectangle-Struktur (wieder XNA). –

Antwort

5

Die Entscheidung läuft darauf hinaus, ob Sie einen Werttyp oder einen Referenztyp haben möchten. Mit anderen Worten, was soll der Zuweisungsoperator bedeuten? Wenn die Zuweisung den Wert kopieren soll, verwenden Sie eine Struktur. Wenn Sie möchten, dass die Zuweisung eine andere Referenz e annimmt, verwenden Sie eine Klasse.

+0

Vielen Dank für Ihre Antwort :) Ja, ich bekomme die Wert vs Referenz Sache. Ich denke, ich bin zu tief in einem Artikel, der besagt, dass es verwendet werden sollte, wenn das Objekt unveränderlich ist, kleine Datentypen usw. Da es sich um eine Q & A-App handelt, werden viele Ladefragen und -antworten zum Vergleich angezeigt. Klasse ist definitiv der Weg für diesen Typ. Nochmals vielen Dank für die Tatsache, dass: P –

1

Es gibt zwei primäre Anwendungsfälle für Strukturen: Für Situationen, in denen Aggregationen unabhängiger Variablen (wie z. B. die Koordinaten eines Punkts) bequem verschoben werden sollen oder in denen häufig ein kleines unveränderliches Objekt verwendet wird ist nicht wichtig (wie zB bei Decimal oder DateTime). Da eine Variable des Strukturtyps lediglich eine Aggregation von Variablen enthält, sollten Strukturen, die für diesen Zweck verwendet werden, ihre Inhalte einfach als öffentliche Felder offenlegen. Dadurch wird klar, dass alle Invarianten, die für Strukturelemente anwendbar sind, in der Verantwortung des Codes liegen, der die Struktur erstellt. Wenn zum Beispiel eine Struktur MinMax mit int Mitgliedern Minimum und Maximum vorliegt, würde die Verwendung exponierter öffentlicher Felder für diese Mitglieder klarstellen, dass die Struktur selbst kein Versprechen gibt, dass Maximum >= Minimum. Eine Methode, die eine solche Struktur zurückgibt, kann versprechen, dass sie keine Maximum < Minimum zurückgibt, aber Methoden, die Strukturen empfangen und Maximum >= Minimum wollen, müssen diese Felder selbst überprüfen. Auf der anderen Seite kann ein Code, der diese Werte in einer Struktur setzen möchte, diese in der richtigen Reihenfolge einstellen, ohne sich darum kümmern zu müssen, dass die Struktur eine Ausnahme auslöst, weil Minimum höher als Maximum gesetzt wurde.

Die MSDN-Richtlinien gehen davon aus, dass der Zweck jeder Struktur darin besteht, sich wie ein Objekt zu verhalten. Da sich stückweise veränderbare Strukturen nicht wie Objekte verhalten, sollten Strukturen, die wie Objekte verwendet werden, nicht stückweise veränderbar sein. Auf der anderen Seite können Aggregationen von Variablen an und für sich nützlich sein; Man sollte eine Struktur in Fällen verwenden, in denen man eine Aggregation von Variablen wünscht, aber sollte versuchen, es so offensichtlich wie möglich zu machen, dass die Struktur eine Ansammlung von Variablen und nicht ein Objekt ist.