C#中字段(field)和属性(property)有什么区别?
大家好!我是一名C#初学者,一直搞不懂字段和属性的区别。看起来两者都能存储数据,那为什么还要发明属性呢?
我有一个`Person`类。我可以这样写:
```csharp
public class Person
{
public string Name;
}
```
这是字段。但我看到很多人这样写:
```csharp
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
```
这是属性。两种方式似乎效果一样:我都能赋值和读取。例如:
```csharp
Person p = new Person();
p.Name = "阿列克谢";
Console.WriteLine(p.Name);
```
结果相同。那为什么还要费事写`get`和`set`?为什么不能一直用公共字段?我听说这和封装有关,但既然我仍然可以写入任意值,属性怎么改进封装呢?
请解释一下。