【C#】【语法】类的成员变量(字段)和属性
1. 成员变量(字段)
- 定义:成员变量(通常简称为字段)是类中直接声明的数据成员,用于存储对象的状态。
- 访问修饰符:字段可以用访问修饰符(如
public
、private
、protected
等)来控制其访问级别,但通常将字段声明为private
,以遵循封装的原则。 - 语法:字段的声明通常是直接的,没有任何附加的逻辑。
- 示例:
public class Person { // 这是一个字段 private string name; }
- 特点:
- 字段是直接存储数据的容器。
- 字段通常在类内部直接使用。
- 没有内置的逻辑来控制对字段的访问或修改。
2. 属性
- 定义:属性是对类中数据的封装,提供了通过
get
和set
访问器来读取和写入类成员数据的机制。属性本质上是字段的高级形式,它允许你在访问字段时执行额外的逻辑。 - 访问修饰符:属性的访问级别可以通过
get
和set
访问器分别控制。 - 语法:属性通过
get
和set
访问器来实现访问控制。 - 示例:
public class Person { private string name; // 属性带有自定义的 get 和 set 逻辑 public string Name { get { return name; } set { if (!string.IsNullOrEmpty(value)) { name = value; } } } }
- 特点:
- 属性可以封装字段,允许开发者隐藏实现细节。提供一个易于使用的接口(
get
和set
),并允许在读取或写入时执行额外的逻辑(写在get和set里),例如数据验证或格式化、事件触发等。 - 访问控制:可以对
get
和set
访问器分别应用不同的访问修饰符,允许精细的访问控制。属性可以定义为只读(只有get
),只写(只有set
),或读写(同时有get
和set
)。 - 自动属性(如
public string Name { get; set; }
)提供了一种简洁的方式声明属性,而不必显式声明字段。
- 属性可以封装字段,允许开发者隐藏实现细节。提供一个易于使用的接口(
- 关于set和get:
- 在任何地方给属性赋值时,就会调用其set方法;在任何地方读取属性的值时,就会调用get方法。
3. 总结
- 字段是类中直接用于存储数据的成员,一般是
private
的,不提供直接的访问方式。 - 属性则提供了一种受控的方式访问字段,可以添加额外的逻辑,如验证、通知、或其他业务规则。
- 使用字段通常是简单、快速的,但可能会违反封装原则;而使用属性则可以更好地封装类的数据,并符合面向对象的编程理念。