статический параметр инициализации заказа - PullRequest
2 голосов
/ 24 января 2011

Существует ли какая-либо спецификация для порядка инициализации статических параметров только для чтения?

Можно ли быть уверенным, что в следующем примере массив всегда создается с длиной 6?

public class Foo {
    private static readonly int MAX_STACKSIZE = 6; 
    private static readonly int[] m_stack = new int[MAX_STACKSIZE]; 
}

Или есть ли вероятность инициализации m_stack до MAX_STACKSIZE?

@ Редактировать: изменено const на static readonly

1 Ответ

6 голосов
/ 24 января 2011

EDIT: Этот ответ был написан, когда пример кода содержал «const» вместо «static readonly». Это не подходит для текущей версии вопроса - я могу написать другой ответ, чтобы решить этот вопрос в какой-то момент, но у меня сейчас нет времени.

Это все равно не будет действительным C #, так как вы не можете установить const int[] для чего-либо, кроме null.

Однако в более общем случае применяется раздел 10.4 спецификации C #:

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

Затем приводится следующий пример:

class A
{
    public const int X = B.Z + 1;
    public const int Y = 10;
}

class B
{
    public const int Z = A.Y + 1;
}

и говорит ...

компилятор сначала оценивает A.Y, затем оценивает B.Z и, наконец, оценивает A.X, производя значения 10, 11 и 12 в этом порядке.

...