2009-05-26 5 views
0

Si vous avez un type immuable comme ceci:Comment créer un membre const pour un type immuable?

struct Point3 
{ 

} 

et un membre intérieur comme origine:

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

devriez-vous utiliser:

new Point3 (0,0,0) 

?

Il me semble que puisque le type ne peut pas être changé, pourquoi avoir beaucoup d'origines qui sont essentiellement la même chose? Comme nous ne changeons jamais 0, non?

Comment réaliser la même chose pour les types immuables?

Répondre

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

+1 Mais ce ne est pas vraiment « const », est-il? ;) –

+0

C'est assez proche. Le plus proche, probablement :) –

+0

Merci, mais pourquoi créer de nouvelles instances à chaque fois que cela s'appelle? Ou est-il seulement appelé une fois, je veux dire la création d'un nouveau point3 en accédant au membre d'origine. –

1

Comme mentionné Andrew, vous ne pouvez pas utiliser const pour cela parce que ce n'est pas une constante de compilation.

Notez que si vous êtes allez utiliser un constructeur à plusieurs reprises, vous seriez mieux (d'un point de vue de la performance) appelant

new Point3() 

que

new Point3(0, 0, 0) 

Le compilateur sait que la première version va juste effacer la mémoire, et n'a pas besoin d'appeler du code.

Cependant, je vais avec fournir un membre Origin et en utilisant au lieu que partout, si possible :)

+0

Merci Jon. Dans la dernière ligne, vous voulez dire que je devrais aller de l'avant et utiliser Origin avec readonly et new Point3()? –

+0

Btw Jon, pourquoi const ne peut pas être utilisé avec ça? Vous pouvez faire const int a = 1, non? Pourquoi pas nouveau Point3()? –

+1

@Joan: Parce qu'il n'y a aucun moyen de représenter un littéral Point3D dans le code. –

Questions connexes