c#值类型和引用类型

c#引用类型和值类型内存模型求解



对于值类型存储 在栈中,引用类型存储在堆中我是理解的

class A{}
class B
{
private A a;//A也是存储在堆上的
public void Test(){}//栈上指向堆上B的指针->B(这个在堆上),然后B中有个指针指向堆中A所在的地址
}
情况二:
struct JGT
{
A a;
//JGT被分配在栈上.同样内部有个指向堆中A所在内存的指针
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
RefType reft
=new RefType();
ValueType value
=new ValueType();
reft.Var
=100;
value.Var
=100;
Response.Write(
"RefType:var"+reft.Var.ToString()+"</br>");
Response.Write(
"ValueType:var"+value.Var.ToString()+"</br>");
RefType refto
=reft;
ValueType valueo
=value;
refto.Var
=10;
valueo.Var
=1000;
//引用类型
Response.Write("RefType:var" + reft.Var.ToString() + "</br>");//修改之前 输出RefType:var10
Response.Write("RefType:var" + refto.Var.ToString() + "</br>");//修改之后 输出RefType:var10

//值类型
Response.Write("ValueType:var" + value.Var.ToString() + "</br>");//修改之前 输出ValueType:var100
Response.Write("ValueType:var" + valueo.Var.ToString() + "</br>");//修改之后 输出ValueType:var1000
}

public struct ValueType
{
public int Var;
}

public class RefType
{
public int Var;
}

}
原文地址:https://www.cnblogs.com/aiyp1314/p/2100861.html