------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
C#中属性与字段的区别
先上代码:
class A
{
int number;
public int Nunber
{
get{....}
set{....}
}
}
如上:number是字段 Number是属性
字段:与对象或类相关联的变量。通常来讲修饰符是public的成员变量称为字段,而private更适合说是局部变量。
属性:字段的自然扩展,使得在保证封装性的基础上实现了访问私有成员的便捷性
属性与字段相同点:
两者都是具有关联类型的命名成员,而且访问字段和属性的语法是相同的。
属性与字段的不同点:
属性有访问器(accessor),这些访问器指定在它们的值被读取或写入时需执行的语句。
属性与字段的声明:
属性的声明类似于字段,不同之处在于属性的声明以定界符{}之间的get访问器和/或set访问器结束,而不是分号。
同时包含get访问器和set访问器的属性称为读写属性(read-write property)。
只具有get访问器的属性称为只读属性(read-only property)。
只具有set访问器的属性称为只写属性(write-only property)//没多大意义。
字段一般定义为私有的,为了防止外界随意访问,属性就是可控的字段访问,让用户通过属性访问字段,我们可以在属性里做很多事,比如判断用户权限、验证用户提供的值的合法性等等等
get访问器相当于一个具有属性类型返回值的无参数方法。除了作为赋值的目标外,当在表达式中引用属性时,会调用该属性的get访问器以计算该属性的值。
set访问器相当于一个具有单个名为value的参数和无返回类型的方法。当一个属性作为赋值的目标,或者作为++或--运算符的操作数被引用时,就会调用set访问器,所传递的自变量将提供新值。
代码实现属性与字段的区别:
public class Class1
{
private int m_member;
public Class1()
{
}
public int member
{
get
{
return m_member;
}
set
{
m_member=value;
}
}
}
和
public class Class1
{
public int m_member;
public Class1()
{
}
}
//有什么区别呢?
//后者显得简洁得多,为什么却看到多数人都在使用前者?
//数据成员最好不要设置成public的,即数据隐藏。
//属性可以设置是否读写,可以在get和set中加入一些控制,适合和外部交互使用,字段是在程序内部使用,是隐藏的
例如:
private int a=0;
public int A
{
get{return this.a;}
set{this.a=value;}
}
//这样的话,如果我用你的类只能看到属性A,而不是内部字段a,这也是使用属性的好处