2011-01-19 3 views
3

Если у меня есть тип, как это:Статическая инициализация поля/свойство

public struct Effect 
{ 
    public int Value { get; set; } 

    public static int MinValue = Int32.MinValue; 
} 

Would MinValue быть инициализирован только один раз, так же, как выполнение статического конструктора? Или я должен инициализировать MinValue внутри статического конструктора?

Будет ли это отличаться от classes?

ответ

3

Он будет выполнен ровно один раз, но не вполне, как если бы он был в статическом конструкторе. Правила о том, когда выполняются инициализаторы типов, - different when a type has a static constructor. Обратите внимание, что наблюдаемое поведение changed a bit in .NET 4.0 тоже. Обычно вам не нужно беспокоиться об этом.

Насколько я знаю, нет никакой разницы в инициализации типа между классами и структурами.

Отметьте, что ваше поле MinValue является общедоступным и доступен для записи - это должно быть? Это похоже на плохую идею.

+0

Спасибо, Джон, я не видел ваших сообщений сам в течение длительного времени. Я фактически компилирую .NET 4.0. Вы правы, было не намерено иметь MinValue как доступный для записи. –

4

Да, он инициализируется ровно один раз, перед выполнением статического конструктора. То же самое для ссылочных типов (классов).

4

Да, он будет инициализирован только один раз на процесс (домен приложения).

Смежные вопросы