C#基础 [06] 字段

一、实例成员与静态成员

  在上一篇文章中,将成员按照作用,分为数据成员和函数成员。从另一个角度——成员的生存期(或者说作用域、存在性),可以将成员分为实例成员与静态成员。

  1.实例成员

    实例成员是和类的实例关联的,类的每个实例都拥有自己的各个类成员的复制。实例成员随着实例的创建而创建,随着实例的销毁而销毁。默认情况下,成员都是实例成员,被关联到一个实例。实例成员使用"实例名.成员名”访问。

  2.静态成员

    静态成员是和类本身相关联的类成员,他们被类的所有实例共享,所有实例都访问同一内存位置。静态成员的生存期也是与类本身相关的,只要类声明完成就可以访问,它的存在性与实例无关。要声明一个静态成员,需要在成员类型之前使用static修饰符。静态成员使用“类名.成员名”的方式访问。

二、实例字段

  1.实例字段的声明与访问

    我们常说的字段,默认的就是实例字段。实例字段就是声明在类中、隶属于类的变量。

    下面是一个实例字段的例子,注意:实例d2.Member的值的改变对d1.Member的值没有影响,因为他们属于不同的实例,d1和d2都有类字段Member的复制。

 1     class D
 2     {
 3         //  声明一个整型实例字段
 4         public int Member;
 5     }
 6 
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             D d1 = new D();
12             D d2 = new D();
13             d1.Member = 1;
14             d2.Member = 2;
15             Console.WriteLine("d1.Member = {0},d2.Member = {1}", d1.Member, d2.Member);
16         }
17     }

  2.字段的初始化

    1).显式初始化

      显式初始化就是在字段声明的同时使用初始化语句(求值表达式)为字段赋初值,而且该初始值必须是编译器可以确定的。

1     class D
2     {
3         // 显式初始化
4         public int Member = 10;
5         public string Member1 = "haha";
6    
7     }

    2).隐式初始化

      如果在字段声明的时候没有初始化语句,那么字段的值就是编译器为它根据字段的类型分配的默认值。值类型的默认值都是0,bool类型的默认值是false,引用类型的默认值是null。

1     class D
2     {
3   
4        // 隐式初始化
5         public int x;   // x = 0
6         public Person p;    // p = null
7 
8 
9     }

三、静态字段

  1.静态字段的声明与访问

    静态字段与实例字段的主要区别主要在于存储位置与作用域方面,而声明方式相差不大。使用static关键字作为修饰符就可以声明一个静态字段。    

1     class D
2     {
3         // 实例字段
4         public int M1;
5         //静态字段
6         public static int M2;
7     }

  2.静态字段示例  

 1     class D
 2     {
 3         public int Member;
 4         // 实例字段
 5         public int M1;
 6         // 静态字段
 7         public static int M2;
 8 
 9         public void OutPut()
10         {
11             // 在类的内部,访问静态成员与访问实例成员一样
12             Console.WriteLine("M1={0},M2={1}", M1, M2);
13         }
14     }
 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5 
 6             // 创建类的一个实例
 7             D d3 = new D();
 8 
 9             // 实例字段通过"实例名.字段名"进行访问
10             d3.M1 = 5;
11             // 静态字段通过“类名.成员名”进行访问
12             D.M2 = 10;
13             d3.OutPut();
14 
15 
16         }
17     }

 

posted @ 2012-12-30 23:27  YunshiSun  阅读(511)  评论(0编辑  收藏  举报