Значение по умолчанию для автоматического свойства

Могу ли я сгенерировать в C # автоматическое свойство со значением по умолчанию?

public class MyClass
{
     MyClass()
     {
         Reason = "my reason";
     }

     public string Reason{ get; set; }
}

person Yakov    schedule 07.01.2014    source источник
comment
Вы пробовали это проверить, работает ли?   -  person Sani Singh Huttunen    schedule 07.01.2014
comment
Вы спрашиваете, действителен ли предоставленный вами код или есть другой способ? Для авто-свойств - НЕТ, это единственный выход.   -  person Dimitar Dimitrov    schedule 07.01.2014


Ответы (3)


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

public class MyClass
{
    public MyClass()
    {
        Reason = "my reason";
    }

    public string Reason {get; set; }
}
person Abbas    schedule 07.01.2014

Да, ты можешь. Определенно. Так же, как вы это показали.

person O. R. Mapper    schedule 07.01.2014
comment
За что проголосовали против? (Изначально я хотел опубликовать одно «Да», но, к сожалению, SO не позволил мне опубликовать такой короткий ответ.) - person O. R. Mapper; 07.01.2014
comment
Не проголосовал против, но это не сработает as shown, потому что конструктор не является общедоступным, поэтому var mc = new MyClass() даже не будет компилироваться. - person Abbas; 07.01.2014
comment
@Abbas: Как объясняется в MSDN, видимость по умолчанию для участников private, так что конструктор действительно не публичный. Его можно вызвать только из класса. Где OP требует, чтобы var mc = new MyClass(); был компилируемым? - person O. R. Mapper; 07.01.2014
comment
@Abbas Он нигде не делает new ... Если хочешь быть педантичным. В любом случае +1 :) - person Dimitar Dimitrov; 07.01.2014
comment
Не сказал, что он этого требует, я только что упомянул об этом. Но вы правы в своем ответе, и @DimitarDimitrov не хотел быть педантичным, я просто пытался помочь, +1 от меня тоже. :) - person Abbas; 07.01.2014
comment
@Abbas Конечно, я понял, извини, если я звучал как придурок, у меня был длинный день :) Ура - person Dimitar Dimitrov; 07.01.2014
comment
Нет, стоит указать на это. Заставляет задуматься, прежде чем давать комментарии / ответы. ;) - person Abbas; 07.01.2014
comment
@ Аббас: Просто чтобы прояснить; Верно, что, вероятно, желателен публичный конструктор. Но он компилируется как есть, и, возможно, OP хочет сохранить конструктор закрытым и вместо этого добавить статический фабричный метод (или просто создать экземпляр класса через отражение для некоторого экземпляра). - person O. R. Mapper; 07.01.2014
comment
Ты совершенно прав. Вот почему я объяснил, что вы были правы с самого начала, и почему вы получили от меня положительный голос. :) - person Abbas; 07.01.2014

Вам необходимо добавить конструктор по умолчанию и инициализировать значение автосвойства.

person Antonio Petricca    schedule 07.01.2014
comment
Вот что он сделал. Он просто хочет знать, сработает ли это. - person Abbas; 07.01.2014
comment
Я спрашиваю, правильный ли это / лучший способ - person Yakov; 07.01.2014
comment
Да, это единственный способ !! - person Vishal Suthar; 07.01.2014
comment
Я предложил это решение, потому что оно работает! ;) - person Antonio Petricca; 07.01.2014