C#学习笔记(基础知识回顾)之值类型与引用类型

作者:编程技术

五:装箱拆箱的习性影响

从常理上能够见见,装箱时,生成的是全新的援引对象,那会一时光消耗,也正是以致功用下落。 
因此,应该尽量制止装箱。 

美高梅4858官方网站,例如4.1的景况能够通过措施重载幸免,4.2不择花招利用泛型逃匿装箱拆箱操作。

 

二:值类型转换为援引类型——装箱

  2.1CLHaval对值类型进行李装运箱时:新分配托管堆内部存款和储蓄器,将值类型的实例字段拷贝到新分配的内部存储器中,再次回到托管堆中新分配成对象的地址。这些地方即是叁个针对性对象的援引。

int i = 10;
Object obj = i;

美高梅4858官方网站 1

二:值类型转变为引用类型——装箱

  2.1CL奇骏对值类型实行装箱时:新分配托管堆内部存款和储蓄器,将值类型的实例字段拷贝到新分配的内部存款和储蓄器中,再次来到托管堆中新分配对象的地址。那些地址正是四个照准对象的援用。

int i = 10;
Object obj = i;

美高梅4858官方网站 2

三:将引用类型调换为值类型——拆箱

  3.1不能不对以前装箱的变形进行拆箱,拆箱是将指标调换为原来的体系

int i = 10;
Object obj = i;
int j = (int)obj;

美高梅4858官方网站 3

四:为啥必要装箱拆箱?

   4.1生机勃勃种最日常的场景是,调用一个含类型为Object的参数的方法,该Object可帮助大肆为型,以便通用。当您需求将一个值类型传入时,须求装箱。比方:AddOne选取叁个Object类型参数,要是是int32类型则数值加1,假如是string类型则加字符串“1”。

static void Main(string[] args)
        {
            int i = 10;
            string str = "10";
            Console.WriteLine(AddOne(i));//输出11
            Console.WriteLine(AddOne(str));//输出101
            Console.ReadKey();
        }
        public static string AddOne(Object o)
        {
            if (o.GetType() == typeof (Int32))
            {
                return ((int) o   1).ToString();
            }
            else if(o.GetType()==typeof(String))
            {
                return o  "1";

            }
            else
            {
                return "1";
            }
        }

  4.2另后生可畏种用法是,三个非泛型的容器,相符是为着保险通用,而将成分类型定义为Object。于是,要将值类型数据到场容器时,须要装箱。比如:

var array = new ArrayList();
            array.Add(1);
            array.Add("2");

            foreach (var value in array)
            {
                Console.WriteLine("value is {0}", value);
            }
            //结果输出是:value is 1
            //            value is 2
            Console.ReadKey();

四:为啥须要装箱拆箱?

   4.1生龙活虎种最家常的气象是,调用二个含类型为Object的参数的格局,该Object可支撑猖狂为型,以便通用。当你须求将四个值类型传入时,必要装箱。例如:AddOne选取贰个Object类型参数,假若是int32种类则数值加1,假使是string类型则加字符串“1”。

static void Main(string[] args)
        {
            int i = 10;
            string str = "10";
            Console.WriteLine(AddOne(i));//输出11
            Console.WriteLine(AddOne(str));//输出101
            Console.ReadKey();
        }
        public static string AddOne(Object o)
        {
            if (o.GetType() == typeof (Int32))
            {
                return ((int) o   1).ToString();
            }
            else if(o.GetType()==typeof(String))
            {
                return o  "1";

            }
            else
            {
                return "1";
            }
        }

  4.2另黄金年代种用法是,三个非泛型的器皿,同样是为着保障通用,而将成分类型定义为Object。于是,要将值类型数据参加容器时,需求装箱。举个例子:

var array = new ArrayList();
            array.Add(1);
            array.Add("2");

            foreach (var value in array)
            {
                Console.WriteLine("value is {0}", value);
            }
            //结果输出是:value is 1
            //            value is 2
            Console.ReadKey();

风姿罗曼蒂克:值类型和援引类型的意义参谋前后生可畏篇小说

  C#学学笔记(底工知识回看)之值类型和援引类型

  1.1,C#数据类型分为在栈上分配内部存款和储蓄器的值类型和在托管堆上分配内部存款和储蓄器的援用类型。若是int只不过是栈上的二个4字节的值,该怎样在它上面调用方法?

生龙活虎:值类型和援引类型的意思参照他事他说加以考查前风姿罗曼蒂克篇小说

  C#学习笔记(功底知识回看)之值类型和引用类型

  1.1,C#数据类型分为在栈上分配内部存款和储蓄器的值类型和在托管堆上分配内部存款和储蓄器的援引类型。如果int只然则是栈上的八个4字节的值,该怎么在它上边调用方法?

三:将援引类型转变为值类型——拆箱

  3.1必须要对原先装箱的变形举办拆箱,拆箱是将对象调换为本来的类型

int i = 10;
Object obj = i;
int j = (int)obj;

美高梅4858官方网站 4

五:装箱拆箱的性情影响

从规律上能够观望,装箱时,生成的是全新的引用对象,那会临时间费用,也正是以致成效缩短。 
所以,应该尽量制止装箱。 

譬喻4.1的情景能够经过艺术重载制止,4.2不择花招利用泛型逃避装箱拆箱操作。

 

风姿浪漫:值类型和引用类型的意思参照他事他说加以考察前风度翩翩篇文章 C#学习笔记(功底知...

C#上学笔记(幼功知识回看)之值类型与援用类型转变(装箱和拆箱),

本文由分分快三计划发布,转载请注明来源

关键词: