现在的位置: 首页 > 综合 > 正文

深入理解C#的中static

2013年09月27日 ⁄ 综合 ⁄ 共 1034字 ⁄ 字号 评论关闭

深入理解Java和C#中static

顾名思义,static是静态的含义。一个静态的方法,只能调用静态成员。
static还有一个作用,就是“所有对象共享”。
下面的代码反映了在C#中对static变量的调用以及static变量的共享情况。

using System;

namespace staticTest
{
 public class stu
 {
  public static int x = 0;  //所有对象共享
  public int y = 0;  //所有对象独立
  public stu(){
   x ++;
   y ++;
  }
 }
 
    public class Program
 {
  public static void Main(string[] args)
  {
   Console.WriteLine("Hello World!");
   
   Console.WriteLine(stu.x);
   
   stu s1 = new stu();
   Console.WriteLine(stu.x);
   stu s2 = new stu();
   Console.WriteLine("s1 = " + stu.x);
   Console.WriteLine("s1 = " + s1.y);
   Console.WriteLine("s2 = " + stu.x);
   Console.WriteLine("s2 = " + s2.y);
   
   
   // TODO: Implement Functionality Here
   
   
   Console.Write("Press any key to continue . . . ");
   Console.ReadKey(true);
  }
 }
}

输出结果:
Hello World!
0
1
s1=2
s1=1
s2=2
s2=1

在这里,有些地方是要注意和值得深究的:
1.访问stu类中静态成员x只能使用stu.x,而不能实例化stu。
2.在面向对象中,声明和定义是不同的,声明并不分配内存区域,但是定义就会在内存中开辟一片区域存

放该变量。
当我们定义s1:stu s1 = new stu();
这时候,已经在内存中开辟了stu这样对象的空间了,在这个空间中,x是存放在公共区域中,当我们再次

定义一个stu对象s2:stu s2 = new stu(); 时,公共空间的x值会在原来基础上加i1
但是y是s2自己空间里的,结果自然是1.
3.我们要想访问s1的x,方法只能使用stu.x,而不能使用s1.x,这个是Java和C#的区别。

抱歉!评论已关闭.