变量的作用域就是变量声明后的使用范围,可以在变量声明时给出变量的使用范围。而变量的生存周期就是在变量的作用域内,当程序执行到定义变量所在的大括号之外时,变量的生存周期就结束了,在定义变量所在的大括号之外不可以调用在大括号内定义的变量。
实例演示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个实例可以看出,如果变量的生存周期过长,对象被很长生存周期的变量引用,会导致托管堆内不能及时释放无用对象,增加托管堆的压力,如果过多声明全局变量或类的静态字段会是程序内存占用增加。