0 голосов
 
714 просмотров
10.04.2017 / 21:24  Витаминыч

Свойства класса в C#

Есть ли существенная разница между таким
  1. private string name;
  2.  
  3. public string Name
  4. {
  5.     get { return name; }
  6.     set { name = value; }
  7. }
и таким
  1. private string name;
  2.  
  3. public string Name { get; set; }
написаниями? В коде сложной логики нет.
Класс разрастается, появляются новые поля и для каждого писать свойства..

Как это вообще работает?
Изм. Витаминыч от 10.04.2017 / 21:26
Ответы
 
3 голоса
 
# 11.04.2017 / 05:55  Arigato
Во втором варианте у тебя появляется свойство Name и поле name, которые не связаны друг с другом.
В простых случаях, когда нужен доступ к полю класса без какой-либо логики, достаточно использовать автосвойства:

  1. public string Name { get; set; }

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

Свойства могут играть роль «синтетических» полей класса, например, у тебя есть некоторое диалоговое окно с таблицей dataView:

  1. public partial class UserSelect : Window {
  2.   // XAML: DataGrid dataView;
  3.  
  4.   public User SelectedUser {
  5.     get { return dataView.SelectedItem as User; }
  6.     set { dataView.SelectedItem = value; }
  7.   }
  8.  
  9.   // ...
  10. }

Таким образом, при использовании этого диалога, чтобы получить выбранный элемент в таблицу, нет необходимости лезть во внутренности диалога — достаточно воспользоваться свойством SelectedUser.

Грубо говоря, свойства — это аналог сеттеров и геттеров из Java с более удобным синтаксисом и чуть дополненной семантикой.
Изм. Arigato от 11.04.2017 / 05:55
11.04.2017 / 14:59  Витаминыч
Если не связаны, то как связать?
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt