- 域成员是利用具有公共访问性的成员变量来实现的,使用较为简单方便。
- 属性通过存取标志来访问,隐藏了实现的细节,功能强大。
域成员
C# 成员变量可以可以在声明时直接赋值。
class CFoo
{
public int v = 3; //成员变量
}
public 不能少,用来表示存取权限,更多知识请参见不要 const,用 readonly?和C# 可访问性级别。
属性
在 C# 中,属性赋值关键字是 set,返回属性值关键字是 get,与其它语言可能不同。
class CSquare
{
private int pvtWidth = 0;
public int Width
{
set
{
pvtWidth = value; //属性赋值
}
get
{
return pvtWidth; //返回属性值
}
}
}
一个 private 变量用于存储属性值,与外界打交道的是 Width(我们将其首字母大写),属性通过 get、set、value 关键字实现功能,以上示例使用属性跟使用域成员是一样的,还没有体现出属性的优点。
优点一:
class CSquare
{
private int pvtWidth = 0;
public int Width
{
get
{
return pvtWidth;
}
}
}
上述示例中,如果我们试图给 Width 赋值,便会出现错误,因为没有实现 set,这就成了只读属性,同样,我们只实现 let 就成了只写属性。
优点二:
class CSquare
{
private int pvtWidth = 0;
public int Width
{
set
{
pvtWidth = (value>=0)?value:0;
}
get
{
return pvtWidth;
}
}
}
可以看出,我们在为 Width 赋值时,如果该值小于 0,则自动以 0 代替。关于条件运算符,请参见C# 语句-条件语句-条件运算符。