快捷搜索:
来自 计算机编程 2019-10-31 17:48 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

之值类型与引用类型转换

风流罗曼蒂克:值类型和援引类型的含义参照他事他说加以考查前后生可畏篇作品

  C#上学笔记(基础知识回看)之值类型和引用类型

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

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

  2.1CLLacrosse对值类型举行装箱时:新分配托管堆内部存款和储蓄器,将值类型的实例字段拷贝到新分配的内部存储器中,再次回到托管堆中新分配成对象之处。这么些地方正是一个针对对象的援用。

int i = 10;
Object obj = i;

图片 1

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

  3.1只可以对原先装箱的变形举办拆箱,拆箱是将对象调换为本来的门类

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

图片 2

四:为何须求装箱拆箱?

   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的意况能够通过措施重载幸免,4.2尽量利用泛型走避装箱拆箱操作。

 

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:之值类型与引用类型转换

关键词: