为了保存类的实例的各种数据信息,C#提供了两种方法----属性和字段。其中,属性实现了良好的数据封装和数据隐藏。
字段:表示与对象或类相关联的变量,它使类和结构可以封装数据。
字段的定义需要满足类的需求,并选用合适的数据类型;
字段在声明时可以不初始化,但在使用时必须初始化。声明语句和初始化语句可以放在不同的放上;
字段的修饰符可以是new、public、internal、private、static或readonly访问类型。
字段的访问修饰符
public:表明字段可以再定义它的类的内部和外部只有访问;
internal:表明字段只能被在同一个程序集中定义的类型访问;
protected:表明字段在定义它的类型中可以访问,在定义它的类型的派生类型中也可以访问;
private:限制最严的访问类型,只能在定义它的类中访问;
protected internal:表明域可以被同一个程序集中定义的类型访问,或者被派生类型访问。
静态字段和非静态字段
静态字段的声明使用了static修饰符,其他的字段都是非静态字段。静态字段和非静态字段分别属于C#中的静态变量和非静态变量。若将一个字段声明为静态的,无论建立多少个该类的实例,内存中只存在一个静态数据的复制。当这个类的第一个实例建立,字段被初始化后在进行类的实例化时,不在进行初始化,所有属于这个类的实例共享一个副本,与之相反,在类的每次实例化时,非静态域每个实例都拥有一份单独的复制。
只读字段
如果字段的声明加上了readonly修饰符,表明该字段为只读字段。对于只读字段,我们只能在字段的定义中和它所属类的构造函数中进行修改,在其他情况下,字段是只读的。
const型表达式的值在编译时形成,而static readonly表达式的值直到程序运行时才形成。这种技术有利于进行版本控制。
字段的初始化:对于静态变量、非静态的对象变量和数组元素,这些变量自动初始化为本身的默认值。对于所有引用类型的变量默认值为null。
部分类型的字段初始化的值:
byte、short、ushort、int、uint、long、ulong 0
char \x0000
float 0.0f
double 0.0d
decimal 0.0m
bool false
enum 0
字段的默认初始方式:
对于静态字段,类在装载时对其进行初始化;对于非静态字段,在类的实例创建时进行初始化。