Существует ли изящный способ установить значение по умолчанию для свойства в c#?

Я считал, что существуют серьезные основания использовать свойства вместо полей в c# на ТАК. Таким образом, теперь я хочу преобразовать свой код из использования полей к использованию свойств.

Для поля экземпляра класса я могу установить значение по умолчанию. Например:

int speed = 100;

Для эквивалентного свойства, которое я думаю:

int Speed { get; set; }

Мое понимание - то, что свойство Speed будет инициализировано для обнуления, когда класс инстанцируют. Я не мог узнать, как установить значение по умолчанию для легкого обновления моего кода. Существует ли изящный способ обеспечить значение по умолчанию для свойства?

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

5
задан Jeremy Larter 30 June 2010 в 03:44
поделиться

5 ответов

Лучше всего использовать обычное старомодное свойство с полевой поддержкой, например:

private int _speed = 100;
public int Speed { get { return _speed; } set { _speed = value; } }
7
ответ дан 18 December 2019 в 14:42
поделиться

Я использую шаблон проектирования, который используется во всех элементах управления Microsoft Windows.Forms и других классах .NET. Более того, насколько я понимаю, инициализация вне конструктора позволяет своевременному компилятору оптимизировать код класса.

public class Foo {
    public static const int DefaultSpeed = 100;
    private int _speed = DefaultSpeed;
    [DefaultValue(DefaultSpeed)]
    public int Speed { get { return _speed; } set { _speed = value; } }
}

    public class Foo {
        public static Color DefaultForecolor { get {return SystemColors.WindowText; }}
        private Color _forecolor = DefaultForecolor;
        [DefaultValue(DefaultForeColor)]
        public Color Forecolor { get { return _forecolor; } set { _forecolor = value; } }
    }
2
ответ дан 18 December 2019 в 14:42
поделиться

вы должны установить значение по умолчанию для свойства в конструкторе. Нет другого способа сделать это, кроме этого для автоматических свойств, поскольку поля для автоматических свойств объявляются во время компиляции и заменяются в getter / setter. Однако в явных свойствах вы можете инициализировать поле, которое свойство использует для чтения или записи, как сказал Джо в своем ответе.

1
ответ дан 18 December 2019 в 14:42
поделиться

CciSharp поддерживает атрибут DefaultValue , который позволяет помещать значения по умолчанию в свойства auto. Однако вопрос о том, можно ли считать CciSharp «элегантным» решением (он действует как пост-компилятор, редактирующий IL в двоичном файле).

1
ответ дан 18 December 2019 в 14:42
поделиться

Конструктор - единственный способ установить начальное значение свойства auto.

1
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: