Avatar ·

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`?为什么不能一直用公共字段?我听说这和封装有关,但既然我仍然可以写入任意值,属性怎么改进封装呢? 请解释一下。