变量的作用域和生存周期

 变量的作用域就是变量声明后的使用范围,可以在变量声明时给出变量的使用范围。而变量的生存周期就是在变量的作用域内,当程序执行到定义变量所在的大括号之外时,变量的生存周期就结束了,在定义变量所在的大括号之外不可以调用在大括号内定义的变量。

实例演示1:

创建一个控制台应用程序,建立一个全局变量,分析全局变量的生存周期,代码如下:

class program
{
   static void Main()       //入口方法
   {
         Test t = new Test();     //t变量得到Test类型的实例
       t.Name = "会东";         //设置t变量引用实例的Name字段
       t.show();                    //调用t变量引用实例的show方法
       t.show2();                    //调用t变量引用实例的show方法
       Console.WriteLine();      //等待回车继续
     }
}
class Test                              //定义Test类型
{
   public string Name();          //定义全局变量
  public void show()               //定义show方法
  {
        Console.WriteLine("姓名:{0 }",Name);
}
public void show2(); //定义show2方法

 {
     Console.WriteLine("你好:{0}",Name);
}
}

 本例中,Test类型定义了一个全局变量Name,所以在方法show()和方法show()中都可以访问全局变量,在定义Name的大括号内所有方法和变量都可以使用Name变量。

实例演示2:

创建一个控制台应用程序,建立一个局部变量并分析局部变量的生存周期,代码如下:

class program

{

static void Main()       //入口方法

{

Test = new Test();       //t变量得到Test类型的实例

t.show();                    //调用t变量引用实例的show方法

Console.ReadLine();

}

}

class Test       //定义Test类型

{

public void show()             //定义show方法

{

string Name = "会东";   //设置局部变量Name,输出局部变量的值

Console.WriteLine("你好:{0}",Name);

}

}

Test类型的show方法定义了一个局部变量Name,所以在show方法中可以访问局部变量,在定义Name的大括号内所有方法和变量都可以使用Name变量。

演示实例3:

创建一个控制台应用程序,创立一个循环体内的变量并分析生存周期,代码如下:

class program

{

static void Main()

{

Test t = new Test();            //变量t得到Test类型的实例

t.show();  //调用t变量引用实例的show方法

Console.ReadLine()

}

}

class Test   //定义Test类型

{

public void Main()    //定义show方法

{

for(int i = 0;i<5;i++)  //for循环体

{

//循环输出循环体内变量i的值

Console.WriteLine(i.ToString());

}

}

show 方法的循环中定义了一个局部变量i,所以在循环中都可以访问局部变量,在定义i的大括号内所有方法和变量都可以使用变量i。

从上面的3个实例可以看出,如果变量的生存周期过长,对象被很长生存周期的变量引用,会导致托管堆内不能及时释放无用对象,增加托管堆的压力,如果过多声明全局变量或类的静态字段会是程序内存占用增加。

原文地址:https://www.cnblogs.com/dudefu/p/2609853.html