private string _name;
public string Name {
get { return _name; }
set { _name = value; }
}
至于是使用字段还是属性……按OOP的思想,推荐尽量使用属性,就像Java都推荐使用 getXxx 和 setXxx 来封装字段一样;封装之后如果需要对字段进行一些处理,直接修改属性,不会影响到之前写的代码,比如要保证 Name 不是 null
private string name;
public string Name {
get {
return name ?? string.Empty; // 保证 Name 不会是 null
}
set {
if (value == null) {
// 如果给空值就抛异常
throw new ArgumentNullException("Name");
}
name = value;
}
}
上面这段代码就把所有用到 Name 的地方都加了处理。如果是直接使用字段 name 的话,那就得去找到所有使用 name 的地方,加上处理,即容易遗漏,又增加了大量的重复代码。
C#属性和字段的区别可以参考:C#中属性和字段的区别
文末提到
C#的属性其实就是字段的 get 和 set 方法,比如
有一些反编译工具反编译出来就变成了
因为上面(第一段代码)这种写法比较多,属性最常的定义是对字段进行封闭,所以C#从3.0开始加入了自动属性,也就是编译器帮你封装字段,比如代码:
等同的代码就像这样
至于是使用字段还是属性……按OOP的思想,推荐尽量使用属性,就像Java都推荐使用 getXxx 和 setXxx 来封装字段一样;封装之后如果需要对字段进行一些处理,直接修改属性,不会影响到之前写的代码,比如要保证
Name
不是null
上面这段代码就把所有用到
Name
的地方都加了处理。如果是直接使用字段name
的话,那就得去找到所有使用name
的地方,加上处理,即容易遗漏,又增加了大量的重复代码。当然使用属性还是字段,并不是必须如何如何,还是要看使用场景和个人习惯的。