Qual é a diferença entre campo (field) e propriedade (property) em C#?
Olá, colegas! Sou um desenvolvedor C# iniciante e não consigo entender a diferença entre campo e propriedade. Parece que ambos armazenam dados, mas por que então inventaram as propriedades?
Aqui está minha classe `Person`. Posso escrever assim:
```csharp
public class Person
{
public string Name;
}
```
E isso é um campo. Mas vejo que muitos escrevem assim:
```csharp
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
```
E isso é uma propriedade. Ambas as opções parecem funcionar da mesma forma: posso atribuir um valor e lê-lo. Por exemplo:
```csharp
Person p = new Person();
p.Name = "Alexey";
Console.WriteLine(p.Name);
```
O resultado será o mesmo. Então por que complicar com `get` e `set`? Por que não usar sempre campos públicos? Ouvi dizer que isso está relacionado ao encapsulamento, mas não entendo como a propriedade melhora isso se ainda posso atribuir qualquer valor.
Expliquem, por favor.