свойство

Свойство является расширением поля и позволяет получить к нему доступ.
Для свойства не выделяется память.
Для доступа к значениям свойств используются специальные функции доступа : set — для записи значения и get — для чтения.

Синтаксис:
модификатор тип имя_свойства {
 set {
  //код аксессора записи поля
 }
 get {
  //код аксессора записи поля
 }
}

свойство доступное как для записи, так и для чтения

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int val;
  •  public int Val {
  •   set {
  •    val = value;
  •   }
  •   get {
  •    return val;
  •   }
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One();
  •   O.Val = 10;
  •   Console.WriteLine(O.Val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

свойство доступное только для записи

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int val;
  •  public int Val {
  •   set {
  •    val = value;
  •   }
  •  }
  •  public int getVal() {
  •   return val;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One();
  •   O.Val = 10;
  •   Console.WriteLine(O.getVal());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

свойство доступное только для чтения

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int val;
  •  public int Val {
  •   get {
  •    return val;
  •   }
  •  }
  •  public One(int arg) {
  •   val = arg;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(10);
  •   Console.WriteLine(O.Val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

отсутствие кода в теле аксессора set

Если отсутствует код в теле аксессора set, то свойство только возвращает значение, устанавливать значение оно не может.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int val;
  •  public int Val {
  •   set {}
  •   get {
  •    return val;
  •   }
  •  }
  •  public One(int arg) {
  •   val = arg;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(10);
  •   Console.WriteLine(O.Val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

явное указание модификатора перед аксессором

По умолчанию, аксессоры set и get имеют такой же модификатор доступа, что и само свойство.
Иногда нужно ограничить доступ к одному из аксессоров (как правило, к аксессору set), для этого нужно явно перед ключевым словом указать модификатор доступа private.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int a;
  •  int val;
  •  public int Val {
  •   private set {
  •    val = value;
  •   }
  •   get {
  •    return val;
  •   }
  •  }
  •  public One(int arg) {
  •   //устанавливаем значение
  •   Val = a = arg;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One(10);
  •   Console.WriteLine(O.Val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

автоматически реализуемое свойство

Для автоматически реализуемого свойства, автоматически создается скрытое резервное поле, для которого реализуются методы доступа для чтения и записи.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  public int Val {set; get;}
  • }
  •  
  • class Program {
  •  public static int Main() {
  •  One O = new One();
  •   O.Val = 10;
  •   Console.WriteLine(O.Val);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
10

условие в теле аксессора

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  decimal pi;
  •  public decimal Pi {
  •   set {
  •    if(value == 3.14m) {
  •     pi = value;
  •    }
  •    else {
  •     throw new Exception("Число Pi должно быт равно 3.14");
  •    }
  •   }
  •   get {
  •    return pi;
  •   }
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One O = new One();
  •   O.Pi = 3.14m;
  •   Console.WriteLine(O.Pi);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
3,14