C#值类型 引用类型区别示例

C#值类型 引用类型区别示例
值类型通常被分配在堆栈上,引用类型总是分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例,下面是在书上看到的一个例子,能说明白这两种类型的不同。
public partial class _Default : System.Web.UI.Page
{   

//<summary>class是引用类型</summary>
    public class RefType
    {  public int Var;  }
    //<summary>struct
是值类型</summary>
    public struct ValueType
    {
 public int Var;  }
    //<summary>TestValueRef
测试了值类型和引用类型之间的差别</summary>
    private void TestValueRef()
    {
        RefType reft = new RefType();//
定义了引用类型的实例对象
        ValueType valuet = new ValueType();//
定义了值类型的实例对象
        reft.Var = 100;//
赋值
        valuet.Var = 100;//
赋值
        Response.Write("RefType:Var=" + reft.Var.ToString() + "<br>");//
输出
        Response.Write("Valuet:var=" + valuet.Var.ToString() + "<br>");//
输出
            //<summary>
赋值给新的实例对象</summary>
        RefType refto = reft;
        ValueType valueo = valuet;
            //<summary>
给新的实例对象赋值</summary>
        refto.Var = 10;
        valueo.Var = 1000;
            //<summary>
此时的refto.Var=10,托管堆上的Var=10,reftrefto都指向同一个地址,所以他们的值都是一样的,而值类型的valuetvalueo都存在堆栈中,并且值都没有改变</summmary>
        Response.Write("RefType:Var
修改之前="+reft.Var.ToString()+"<br>");
        Response.Write("RefType:Var
修改之后=" + refto.Var.ToString() + "<br>");
        Response.Write("Valuet:var
修改之前="+valuet.Var.ToString()+"<br>");
        Response.Write("ValuetVar
修改之后="+valueo.Var.ToString() + "<br>");
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        TestValueRef();
    }
}

 

 


结果:
RefType:Var=100
Valuet:var=100
RefType:Var
修改之前=10
RefType:Var
修改之后=10
Valuet:var
修改之前=100
ValuetVar
修改之后=1000

 

 

posted on 2008-12-10 16:56  子非魚  阅读(373)  评论(0编辑  收藏  举报