Свойства используются для ужесточения контроля доступа к внутреннему состоянию объекта. Нотация доступа к свойству такая же, как при доступе к общедоступному полю экземпляра. Однако свойство не имеет никакого ассоциированного с ним места хранения в объекте, как это присуще полям. Свойство представляет собой сокращенную нотацию для определения средств доступа для чтения и записи полей. Типичный шаблон предусматривает обеспечение доступа к приватному полю класса через общедоступное свойство. Есть автореализуемые (autoimplemented) свойства.
Существует общепринятое соглашение называть приватное поле именем, совпадающим с именем свойства, но начиная с прописной буквы.
Два блока кода get и set внутри которых помещается код, который читает и записывает значение свойства.
Блок get вызывается, когда клиент объекта читает свойство. Это средство доступа должно возвращать значение или ссылку на объект, соответствующий типу объявления свойства. Также он возвращает объект, неявно конвертируемый в объявленный тип свойства. Например, если тип свойства - long, и get возвращает int, то int будет неявно преобразован к long без потери точности. В противном случае код в этом блоке подобен параметризованному методу, возвращающему значение или ссылку на тип свойства.
Блок set вызывается, когда клиент пытается записывать свойство. Возвращаемого значения здесь нет. value - специальное значение, которое доступно коду внутри блока set. Оно имеет тот же тип, что объявлен в качестве типа свойства. Когда вы записываете значение в свойство, то переменная value устанавливается в значение или ссылку на объект, которые клиент пытается присвоить свойству. В блоке set нельзя объявить локальную переменную по имени value. Средство доступа set подобно методу, принимающему один переметр того же типа, что у свойства и возвращающего void.