1.字段(Field)
public string Type;
这是一个公开的字段。字段是类的一个成员,用于存储数据。在这个例子中,Type是一个公开的字符串字段,意味着它可以直接被类的外部访问和修改。
2.完整属性”(full property)
private string type; //角色类型
public string Type
{
get { return type; }
set { type = value; }
}
这种属性通常被称为“完整属性”(full property),因为它显式地定义了如何获取和设置属性的值。与自动属性不同,完整属性允许您在 get 和 set 访问器中添加自定义逻辑。
在这个特定的例子中,get 和 set 访问器只是简单地返回和设置私有字段 type 的值,没有添加任何额外的逻辑。
然而,这种结构为将来的扩展提供了可能性,比如添加验证逻辑来确保 Type 属性只能被设置为有效的角色类型。
3.自动属性(Auto-Implemented Property)
public string Type { get; set; }
这是一个自动属性。当你声明一个这样的属性时,编译器会自动为你生成一个私有的、只读的备份字段来存储属性的值。你无法直接访问这个备份字段,因为它是由编译器管理的。这个属性有一个get访问器和一个set访问器,允许你获取和设置属性的值。
字段与属性的区别:
- 封装: 自动属性提供了封装的好处,因为你可以通过get和set访问器来控制对属性值的访问和修改。例如,你可以在set访问器中添加验证逻辑,确保属性值满足某些条件。而字段则不提供这样的封装,它们直接暴露给类的外部。
- 可维护性: 使用属性而不是字段通常会使代码更具可维护性,因为你可以在不改变类的外部接口的情况下修改属性的实现。例如,你可以将自动属性更改为只读属性(只提供get访问器),或者添加一个计算逻辑来动态地生成属性的值。
- 惯例: 在C#编程中,通常推荐使用属性而不是字段来公开类的数据成员,因为属性提供了更好的封装和可维护性。字段通常应该被声明为私有的,并通过公共方法或属性来访问。 因此,在大多数情况下,你应该使用自动属性而不是公开的字段来公开类的数据成员。