您的位置:首页 > 编程语言 > C#

深入.NET平台和C#编程_深入C#数据类型

2017-12-31 21:50 531 查看
 深入C#数据类型

一.值类型和引用类型

    1.概述

    (1).值类型

        源于System.ValueType家族,主要包括基本数据类型和枚举类型

                int heightZhang = 170;//张浩的身高

                int heightLi = heightZhang;//赋值操作

                Console.WriteLine("去年--张浩的身高是:" + heightZhang + ",李明的身高是:" + heightLi);

                heightLi = 180;//今年李明德身高变为180

                Console.WriteLine("今年--张浩的身高是:" + heightZhang + ",李明的身高是:" + heightLi);

    小结:对值类型,不同的变量会分配不同的存储空间,并且存储空间中存储的是该变量的值。赋值操作传递的是变量的值,改变一个

变量的值不会引用另一个变量的值。

    (2).引用类型

        源于System.Object家族,主要包括数组,类和接口

                int[] infoZhang = new int[] { 170,60 };//张浩的身高和体重信息

                int[] infoLi = infoZhang;//数组引用赋值

                Console.WriteLine("去年--张浩的身高是:" + infoZhang[0] +"体重是:"+infoZhang[1]+ ",李明的身高是:" + infoLi[0]+"体重是:"+infoLi[1]);

                infoLi[0] = 180;//今年李明的身高变为180

                infoLi[1] = 70;//今年李明的体重变为70

                Console.WriteLine("去年--张浩的身高是:" + infoZhang[0] + "体重是:" + infoZhang[1] + ",李明的身高是:" + infoLi[0] + "体重是:" + infoLi[1]);

    小结:对引用类型,赋值是把对原对象的引用传递给另一个引用。对数组而言,当一个数组引用赋值给另一个数组引用后,这两个

引用指向同一个数组,也就是指向同一块存储空间。

                int[] infoZhang = new int[] { 170,60 };

                int [] infoLi=new int[2];

                Console.WriteLine("复制前--李明的身高是:"+infoLi[0]+"体重是:"+infoLi[1]);

                //数组赋值

                for (int i = 0; i < infoZhang.Length;i++ )

                {

                    infoLi[i] = infoZhang[i];

                }

                Console.WriteLine("去年--张浩的身高是:" + infoZhang[0] + "体重是:" + infoZhang[1] + ",李明的身高是:" + infoLi[0] + "体重是:" + infoLi[1]);

                infoLi[0] = 180;//今年李明的身高变为180

                infoLi[1] = 70;//今年李明的体重变为70

                Console.WriteLine("今年--张浩的身高是:" + infoZhang[0] + "体重是:" + infoZhang[1] + ",李明的身高是:" + infoLi[0] + "体重是:" + infoLi[1]);

    (3).细分值类型和引用类型

        值类型:基本数据类型(整形:int;长整形:long;浮点型:float;双精度型:double;字符型:char;布尔型:bool),

枚举类型(枚举:enum),结构类型(结构:struct)

        引用类型:类(基类:System.Object;字符串:string;自定义类:class),接口(interface),数组(int[];string[])

    2.结构

    (1).结构的定义

        语法:

        访问修饰符 struct 结构名

        {

            //结构体

        }

    (2).结构的使用

        注意:可以不用new,直接定义结构的对象即可;

            声明结构的对象后,必须给结构的成员赋初值

    (3).结构的使用经验

        当对象需要较少的字段来表示时,就可以选用结构来实现

    3.装箱和拆箱

    装箱:

                int i = 123;

                object o = i;//装箱

                i = 456;//改变i的内容

                Console.WriteLine("值类型的值为{0}",i);

                Console.WriteLine("引用类型的值为{0}", o);

    拆箱:

                int i = 123;

                object o = i;//装箱

                int j = (int)o;//拆箱

                Console.WriteLine("值类型的值为{0}", i+"\t"+j);

                Console.WriteLine("引用类型的值为{0}", o);

        将值类型转换为引用类型的过程称为装箱,反之称为拆箱

    经验:在实际的开发中,应该尽量减少不必要的装箱和拆箱,因为二者的存储方式不同,转换时性能损失较大。

二.不同类型的参数传递

    1.概述

    使用值传递,在方法中对参数值的更改在调用后不能保留;

    使用ref方式传递,可以保留对参数值的更改。

    2.值方式参数传递

    (1).使用引用类型作为参数

    (2).使用值类型作为参数

    3.引用方式参数传递

    (1).使用引用类型作为参数

    (2).使用值类型作为参数

           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息