2009-05-26 5 views
0

Wenn Sie einen unveränderlichen Typ wie folgt aus:Wie erstellt man ein Konst-Element für einen unveränderlichen Typ?

struct Point3 
{ 

} 

und Mitglied im Inneren wie Herkunft:

public static const Point3 Origin = new Point3 (0,0,0); 

sollten Sie verwenden:

new Point3 (0,0,0) 

?

Es scheint mir, dass, da der Typ nicht geändert werden kann, warum viele Ursprünge haben, die im Wesentlichen die gleiche Sache sind? Wie wir nie 0 ändern, oder?

Wie erreiche ich dasselbe für unveränderliche Arten?

Antwort

7
public static readonly Point3 Origin = new Point3(0,0,0); 
+0

+1 Aber es ist nicht wirklich „const“, oder? ;) –

+0

Es ist nah genug. Der nächste, wahrscheinlich :) –

+0

Danke, aber warum neue Instanzen jedes Mal erstellen, wenn dies aufgerufen wird? Oder heißt es nur einmal, ich meine die Erstellung eines neuen Point3 beim Zugriff auf das Origin-Mitglied. –

1

Wie Andrew erwähnt, können Sie nicht const dafür verwenden, da es keine Kompilierung-Konstante ist.

Beachten Sie, dass, wenn Sie sind einen Konstruktor wiederholt verwenden, gehen, dann würden Sie besser dran (aus Performance-Sicht) sein

new Point3() 

als

new Point3(0, 0, 0) 

Der Compiler Aufruf weiß, dass die erste Version nur Speicher leeren wird und keinen Code aufrufen muss.

Allerdings würde ich mit der Bereitstellung eines Origin Mitglied mitgehen und die Verwendung dieser überall statt, wo möglich :)

+0

Danke Jon. In der letzten Zeile meinst du, ich sollte fortfahren und Origin mit readonly und new Point3() verwenden? –

+0

Btw Jon, warum const kann damit nicht verwendet werden? Du kannst const int a = 1 machen, oder? Warum nicht neu Point3()? –

+1

@Joan: Da gibt es keine Möglichkeit, ein Point3D-Literal im Code darzustellen. –

Verwandte Themen