Как создать константный член для неизменяемого типа? - PullRequest
0 голосов
/ 27 мая 2009

Если у вас есть такой неизменяемый тип:

struct Point3
{

}

и член внутри, как происхождение:

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

если вы используете:

new Point3 (0,0,0)

Мне кажется, что, поскольку тип не может быть изменен, почему многие источники по сути одинаковы? Как будто мы никогда не меняем 0, верно?

Как добиться того же самого для неизменяемых типов?

Ответы [ 2 ]

7 голосов
/ 27 мая 2009
public static readonly Point3 Origin = new Point3(0,0,0);
1 голос
/ 27 мая 2009

Как упоминал Эндрю, вы не можете использовать const для этого, потому что это не константа времени компиляции.

Обратите внимание, что если вы собираетесь использовать конструктор несколько раз, вам будет лучше (с точки зрения производительности) вызвать

new Point3()

чем

new Point3(0, 0, 0)

Компилятор знает, что первая версия просто очищает память, и ему не нужно вызывать какой-либо код.

Однако, я бы согласился предоставить Origin члена и использовать его везде вместо этого, где это возможно:)

...