C# 引用类型与值类型的区别

//引用类型(使用了class)

class SomeRef{public Int32 x;}



//值类型(使用了struct)

struct SomeVal{public Int32 x;}



static void ValueTypeDemo()

{

    //引用类型在堆上分配空间,值类型在栈上分配,都用new初始化为0

    SomeRef r1 = new SomeRef();

    SomeRef v1 = new SomeVal();

    //引用类型提领指针,值类型直接修改内容

    r1.x = 5;

    v1.y = 5;

    //都显示5

    Console.WriteLine(r1.x);

    Console.WriteLine(v1.x);

    //引用类型只复制引用指针,值类型在栈上分配并复制成员

    SomeRef r2 = r1;

    SomeVal v2 = v1;

    //r1.x和r2.x都改成8,v1改成9,v2不变

    r1.x = 8;

    v1.x = 9;

    //显示8,9,8,5

    Console.WriteLine(r1.x);

    Console.WriteLine(v1.x);

    Console.WriteLine(r2.x);

    Console.WriteLine(v2.x);

}

代码执行时内容分配情况
C# 引用类型与值类型的区别

看内存,可以在性能选择上比较,值操作可以在数据方面比较,引用类有引用的好处,值类型也有它的优势

 

在值类型转换上,C#编译器会自动生成一个值类型的实例进行装箱所需的IL代码。但是需注意代码长度(应是堆占用空间吧)和性能问题

struct Point{public Int32 x,y;}

public sealed class Program

{

    public static void Main()

    {

        ArrayList a new ArrayList();

        Point p;

        for(Int32 i = 0; i < 10; i++)

        {

            p.x = p.y = i;

            a.Add(p);//对值类型进行装箱,并将引用添加到ArrayList中

        }

    }

}

 

你可能感兴趣的:(引用类型)