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的,不提供直接的访问方式。
- 属性则提供了一种受控的方式访问字段,可以添加额外的逻辑,如验证、通知、或其他业务规则。
- 使用字段通常是简单、快速的,但可能会违反封装原则;而使用属性则可以更好地封装类的数据,并符合面向对象的编程理念。