zoukankan      html  css  js  c++  java
  • 深入C#.NET数据类型

                               

                                                                                                                                       深入C#数据类型

    --不同类型的参数传递使用值传递,在方法中对参数的更改在调用后不能保留。使用ref方式传递,可以保留对参数值的更改。 ---值方式参数传递和引用方式传递使用值方式(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留。使用值方式(不用ref修饰)引用类型参数时,参数在方法中的修改会保留。使用引用方式(不用ref修饰)传递值类型和引用类型参数时,参数在方法中的修改都会保留。


    数据类型按存储方式可分为两类:值类型(栈)和引类型(堆)
    值类型:不同的变量会分配不同的存储空间
    存储空间存储的是该变量的值
    改变一个变量值不会影响另一个变量值
    引用类型:赋值是把原对象引用传递给另一个引用
    两个引用指向同一块内存空间
    结构的特点
    1值类型

    2具有较快数据提取速度(结构中可以有字段也可以有方法)
    当对象需要较少字段表示时,可以选用结构
    结构是值类型,数据提取速度快

    但是频繁的赋值操作会占有较大的空间,在开发中多数情况下定义为类
    值类型和引用类型之间的转换
               装箱
    值类型 ------> 引用类型
          <------
           拆箱
    在实际开发中应该减少不必要的装箱和拆箱
    因为二者的存储方式不同,转换时性能损失较大
    不加ref传递参数,值传递,传递的是副本,不会改变原值
    加ref把值类型按引用传递,传递的是引用地址,会改变原值
    使用值传递,在方法中对参数值得更改在调用后不能保留;使用ref方式传递,可以将对参数值更改保留

    值类型和引用类型.C#常用数据类型          

    java                                      C#整形        

    int                                        int浮点型      

    float           float双精度行

    double          double字符串        

    Strinng                      string布尔类       

    boolean          bool枚举类       

    enum           enum

    --值类型源于System.ValueType家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域称为栈(Stack)。只要在代码中修改它,就会在它的内存区域保存这个值。小结对值类型,不同的变量会分配不同的存储空间,并且存储空间中的存储的是改变量的值。赋值操作传递值的是变量的值,改变一个变量的值不会影响另一个变量的值。--应用类型源于System.Object家族在C#中引用类型主要包括数值,类的接口等。

    示例--
    classprogram{staticvoidMain(string[] args){5int[] infozhang =newint[] {170,60};//张浩的身高和体重信息
    int[] infoli=infozhang;//数值引用赋值7
    Console.WritLine("去年--张浩的身高{0},体重{1}",infozhong[0],infozhong[1]);
    Console.WritLine("去年--李明的身高{0},体重{1}",infoli[0],infoli[1]);
    infoli[0]=180;
    infoli[1]=70;
    Console.WritLine("今年--张浩的身高{0},体重{1}",infozhong[0],infozhong[1]);
    Console.WritLine("今年--李明的身高{0},体重{1}",infoli[0],infoli[1]);13Console.ReadLine();}
    
    }

     
    数组复制可以利用循环实现,对于两个数组arry1和arry2(arry2的长度不小于arry1的长度)将数组arry1中元素的值复制到arry2中。
    --细分值类型和引用类型值类型
    --基本数据类型:int 长度型:long 浮点型: float double char bool枚举类:enum结构类:struct引用类型--类:基类:System.Object  字符串:string  自定义类:class接口:interface数组:int [] ,string[]
     ---结构定义:
    访问修饰符 struct 结构名{   //结构体}
    结构的定义有以下特点--
    结构中可以有字段,也可以有数据--定义时,结构中的字段不能被赋初值结构的使用可以不用new 直接定义对象即可声明结构对象后,必须给结构的成员赋初值-------装箱和拆箱
     
     
     
    总结:
    使用值传递时,(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留;
    使用值传递时,(不用ref修饰)传递引用类型参数时,参数在方法中的修改会保留;
    使用引用方式(不用ref修饰)传递值类型参数时或者传递引用类型参数时,参数在方法中的修改都会保留;
    不加ref传递参数,值传递,引用传递的是副本,不会改变原值,加ref,把值类型按照引用传递,传递的是引用地址,会改变原值
    值类型======》引用类型----------装箱
    引用类型=====》值传递--------拆箱
    结构体struct的特点:
    值类型数据,不用new关键字
    具有较快的数据提取速度
    结构中有字段,也可以有方法(字段不可以直接赋初始值)
  • 相关阅读:
    weakself的另一种写法
    SDWebImage的使用说明
    关于AVPlayerItem对象的属性duration返回播放总时长的坑
    Xcode 问题
    循环引用问题
    使用Spring Animation的API创建动画
    iOS触摸事件处理
    OS开发中的事件处理(二)-事件传递,响应者链条
    python实现简单的百度云自动下载
    我眼中的K-近邻算法
  • 原文地址:https://www.cnblogs.com/3020815dzq/p/8166095.html
Copyright © 2011-2022 走看看