Устанавливать свойства класса только через конструктор - PullRequest
21 голосов
/ 01 марта 2010

Я пытаюсь создать свойства класса, которые могут быть установлены только через конструктор этого класса.

Ответы [ 4 ]

35 голосов
/ 05 июля 2016

Эта страница от Microsoft описывает, как добиться установки свойства только из конструктора.

Вы можете сделать неизменное свойство двумя способами. Вы можете объявить установить accessor.to быть приватным. Свойство устанавливается только в пределах типа, но он неизменен для потребителей. Вы можете вместо этого объявить только метод доступа get, который делает свойство неизменным везде, кроме в конструкторе типа.

В C # 6.0, включенном в Visual Studio 2015, произошли изменения, позволяющие устанавливать только свойства из конструктора. И только от конструктора.

Следовательно, код можно упростить до свойства только для получения:

public class Thing
{
   public Thing(string value)
   {
      Value = value;
   }

   public string Value { get; }
}
14 голосов
/ 01 марта 2010

Сделайте так, чтобы свойства имели только поля для чтения:

public class Thing
{
   private readonly string _value;

   public Thing(string value)
   {
      _value = value;
   }

   public string Value { get { return _value; } }
}
5 голосов
/ 15 марта 2017

Начиная с c # 6.0, теперь вы можете получить только те свойства, которые могут быть установлены в конструкторе (даже если в самом свойстве не определено множество. См. Свойство с частным установщиком по сравнению с get-only-property

0 голосов
/ 22 августа 2016

Правильный путь:

public string MyProperty{ get; private set; }

public MyClassConstructor(string myProperty)
{
     MyProperty= myProperty;
}
...