Есть ли элегантный способ установить значение по умолчанию для свойства в C #? - PullRequest
5 голосов
/ 30 июня 2010

Я читал, что есть веские причины использовать свойства вместо полей в c # на SO.Поэтому теперь я хочу преобразовать свой код из использования полей в использование свойств.

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

int speed = 100;

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

int Speed { get; set; }

Насколько я понимаю, свойство Speed ​​будет инициализировано равным нулю при создании экземпляра класса.Я не смог выяснить, как установить значение по умолчанию, чтобы легко обновить мой код.Есть ли элегантный способ предоставить значение по умолчанию для свойства?

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

Ответы [ 6 ]

7 голосов
/ 30 июня 2010

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

private int _speed = 100;
public int Speed { get { return _speed; } set { _speed = value; } }
2 голосов
/ 30 июня 2010

Шаблон дизайна, который я использую, который используется во всех элементах управления 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; } }
    }
1 голос
/ 20 февраля 2019

Я думаю, что самый простой способ установить значение по умолчанию:

public sealed class Employee
{
    public int Id { get; set; } = 10;
}
1 голос
/ 30 июня 2010

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

1 голос
/ 30 июня 2010

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

1 голос
/ 30 июня 2010

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

...