Инкапсуляция дает доступ только через публичные методы, а свойства дают возможность реализации гибкого механизма чтения, записи и вычисления приватного поля. Свойства используют элементы доступа get, set.
class Person {
private string name;
public string Name {
get { return name; }
set { name = value; } // тут можно прописать условия, а не просто присваивание
}
}
// Закомментированный код ниже заменяет весь код внутри класса Person
// public string Name { get; set; }
static void Main(string[] args) {
Person p = new Person();
p.Name = "Bobik";
Console.WriteLine(p.Name);
}
Свойства могут называться как угодно, но принято для понимания кода называть их по имени переменной, но только с большой буквы: name => Name.
Также есть автоматически реализуемые свойства (краткая запись, если нет необходимости реализовать логику в set).
public string Name { get; set; }