zoukankan      html  css  js  c++  java
  • 引用类型和值类型

                              数据类型

    数据类型

    C#中有二种类型:引用类型和值类型;

    值类型:在中分配空间,由系统自动分配;

    引用类型:在中分配空间,由"new"(也就是程序员自身)来分配空间,指向同一内存空间;

         引用类型赋值以后,他们共用同一内存空间,互相影响,一个值改变,另外一个的值也会改变;

    1.1 值类型:  主要有数据类型,结构体,枚举;(string类型为特殊的引用类型)

    // 值类型

    int a1=1,b1=2;

    int c1=a1,d1=b1;

    int temp=c1;

    c1=d1;

    d1=temp;

    Console.WriteLine("c1的值为{0},d1的值为{1}",c1,d1);

    得到c1=2,d1=1;

    1.2值类型是密封的(默认sealed),所以无法继承;

    public static void Main(string[] args){

    //  值类型,由系统在栈中自动分配空间

    int a;  

    intb=1;

    //  引用类型,需要使用new关键字去堆中分配空间;

    int[] myArray=new int[10];

    Hero hero=new Hero();  // 引用类

    }

    1.3 值类型变量赋值又称为拷贝赋值

    二      引用类型

        引用类型: 包含Object, 数组, 类, 接口,委托,string(特殊的);

           可以派生出新的类型;

      引用类型变量的赋值只赋值对对象的引用,而不复制对象本身;

    //  引用类型

    例如:   int[] a=new int[1]

               int[] b=new int[1];

               a[0]=3;

               a=b;

               b[0]=33;

               Console.WriteLine("a的值为{0},b的值为{1}",a[0],b[0]);

    运行得到 a[0]=33, b[0]=33;

    例如:  int a=new int();

     恒等于: int a=0;  //  默认构造函数将0赋值给了a;

    使用new运算符的时候,将调用特定类型的默认构造函数并对变量赋默认值;

    三   值类型和引用类型的区别

    1.在C#中,值类型的变量直接存储数组,而引用类型的变量是对数据的引用

    2.引用类型和值类型相同的是,结构体可以实现接口;

    3.引用类型能派生出新的类型,而值类型不能;

    4.引用类型可以包含null值,值类型不能(可以将null赋值给值类型,如 int? a =null;)(因为值类型都是密封的 sealed);

    5.值类型的变量赋值是直接copy, 而引用类型是只复制对对象的引用;

    6.值类型不支持多态,引用类型支持多态

  • 相关阅读:
    java下Mysql基本操作
    利用CNN进行多分类的文档分类
    对WEB url 发送POST请求
    Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析
    Linq转换操作之ToArray,ToList,ToDictionary源码分析
    Linq基础必备
    var 在linq中的使用
    Linq的使用场景简介和认识
    replaceState 实现返回从新定位
    ReSharper
  • 原文地址:https://www.cnblogs.com/fengjiulin110120/p/6627515.html
Copyright © 2011-2022 走看看