¿Cuál es la diferencia entre field y property en C#?
¡Hola, colegas! Soy un desarrollador C# principiante y no puedo entender la diferencia entre field y property. Parece que ambos almacenan datos, pero ¿entonces para qué se inventaron las properties?
Aquí tengo una clase `Person`. Puedo escribir así:
```csharp
public class Person
{
public string Name;
}
```
Y esto es un field. Pero veo que muchos escriben así:
```csharp
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
```
Y esto es una property. Ambas opciones parecen funcionar igual: puedo asignar un valor y leerlo. Por ejemplo:
```csharp
Person p = new Person();
p.Name = "Alexey";
Console.WriteLine(p.Name);
```
El resultado será el mismo. Entonces, ¿para qué complicarse con `get` y `set`? ¿Por qué no usar siempre fields públicos? He oído que está relacionado con la encapsulación, pero no entiendo cómo una property la mejora si igual puedo escribir cualquier valor.
Explíquenme,