zoukankan      html  css  js  c++  java
  • 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#编译器会自动生成一个值类型的实例进行装箱所需的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中
            }
        }
    }
  • 相关阅读:
    Django REST framework 1
    爬虫基本原理
    QueryDict对象
    Django组件ModelForm
    MongoDB
    Algorithm
    BOM
    CSS
    Vue
    AliPay
  • 原文地址:https://www.cnblogs.com/Events/p/3422609.html
Copyright © 2011-2022 走看看