C#数据类型

一。

值类型和引用类型.

C#常用数据类型

          java                                      C#

整形        int            int

浮点型       float           float

双精度行      double          double

字符串        Strinng           string

布尔类       boolean          bool

枚举类       enum           enum

--值类型

源于System.ValueType家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域称为栈(Stack)。

只要在代码中修改它,就会在它的内存区域保存这个值。

小结

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

--应用类型

源于System.Object家族在C#中引用类型主要包括数值,类的接口等。

示例--

 1 class program
 2 {
 3     static void Main(string [] args)
 4 {
 5     int [] infozhang =new int [] {170,60}; //张浩的身高和体重信息
 6     int [] infoli=infozhang;  //数值引用赋值
 7     Console.WritLine("去年--张浩的身高{0},体重{1}",infozhong[0],infozhong[1]);
 8     Console.WritLine("去年--李明的身高{0},体重{1}",infoli[0],infoli[1]);
 9     infoli[0]=180;
10     infoli[1]=70;
11     Console.WritLine("今年--张浩的身高{0},体重{1}",infozhong[0],infozhong[1]);
12     Console.WritLine("今年--李明的身高{0},体重{1}",infoli[0],infoli[1]);
13       Console.ReadLine();
14      }
15 }

小结

对引用类型,赋值是把原对象的引用传递给另一个引用,对数组而言,当一个数组引用赋值给另另一个数组引用后,这两个引用指向同一个数组,也就是同一个存储空间。

--示例

    class Program
    {
        static void Main(string[] args)
        {
            int[] infozhang = new int[] { 170,60};
            int[] infoli = new int[2];
            Console.WriteLine("复制前的--黎明身高{0},体重{1}",infoli[0],infoli[1]);
           //数组复制
            for (int i = 0; i < infozhang.LongLength;i++ )
            {
                infoli[i] = infozhang[i];
            }
            Console.WriteLine("去年的--张浩身高{0},体重{1},黎明{2},黎{3}",infozhang[0], infozhang[1], infoli[0], infoli[1]);
            infoli[0] = 180;    //今年的身高变成180
            infoli[1] = 70;     //今年的体重变成70
            Console.WriteLine("今年的--张浩身高{0},体重{1},黎明{2},黎明{3}",  infozhang[0], infozhang[1], infoli[0], infoli[1]);
            Console.ReadLine();
        }
    }    

数组复制可以利用循环实现,对于两个数组arry1和arry2(arry2的长度不小于arry1的长度)将数组arry1中元素的值复制到arry2中。

--细分值类型和引用类型

值类型--

基本数据类型:int 长度型:long 浮点型: float double char bool

枚举类:enum

结构类:struct

引用类型--

类:基类:System.Object  字符串:string  自定义类:class

接口:interface

数组:int [] ,string[] 

---结构

定义:

访问修饰符 struct 结构名

{

   //结构体

}

结构的定义有以下特点

--结构中可以有字段,也可以有数据

--定义时,结构中的字段不能被赋初值

结构的使用

可以不用new 直接定义对象即可

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

-------装箱和拆箱

    class Program
    {
        static void Main(string[] args)
        {
            int i=123;
            object o=i;    //装箱
             i=456//改变i的内容
            Console.WriteLine("值类型的值{0}",i);
            Console.WriteLine("引用类型的值{0}",o); 


             int i=123;
            object o=i;    //装箱
            int t=(int)o;   //拆箱

         }
    }                        

--不同类型的参数传递

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

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

---值方式参数传递和引用方式传递

使用值方式(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留。

使用值方式(不用ref修饰)引用类型参数时,参数在方法中的修改会保留。

使用引用方式(不用ref修饰)传递值类型和引用类型参数时,参数在方法中的修改都会保留。

             

原文地址:https://www.cnblogs.com/matianpeng/p/8144921.html