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

    一.引用类型与值类型

    值类型是个轻量级类型,引用类型是个 '重量级‘类型。

    值类型存放的是对象本身,而引用类型存放的对象存放的内存地址

    1.内存分配

    值类型 的实例一般在线程栈上分配, 引用类型的实例则在托管堆上分配。

    注: 值类型的实例并不是一定在线程栈上,和定义的位置也有关系,局部变量和方法参数一定在栈上,但是类的成员变量总是会有类中的其他数据分配在一起,就有可能分配在堆上

    C#同C/C++不同,c#是基于.net环境的,称之为托管。因为之前学的是C语言所以很不理解。

    比如C语言中变量存放在 堆还是栈中并不是有变量类型来决定。 而是由定义变量的方式。栈中存放局部变量的值,系统进行内存分配回收。堆则是程序员创建,回收。

    而在C#托管代码中变量存放内存的位置则不是根据定义变量的方式,他是由实例(C#中用变量类型有些欠妥,用对象实例比较精确点)类型决定的。

    C/C++的 堆与栈区别

    点击打开链接

    点击打开链接


    2. NET FRAMEWORK SDK 文档中已经指明了哪些是引用类型,哪些是值类型

    值类型:值类型称为结构或枚举。struct ,Int32,Boolean,Decimal, 、这些结构都是从System.ValueType派生下来的。所有的枚举都是从System.Enum派生下来的

    引用类型:类 都是引用类型


    3.初始化

    值类型变量创建的时候默认是个包含基础类型的值,所有成员被初始化为 0

    引用类型变量创建的时候默认是null,表明没有指向一个有效的对象,如果直接使用,会抛出一个NullReferenceException的异常。

  • 相关阅读:
    获取华为OID
    win10 mongodb的安装
    第一次使用plotly画图遇到的问题
    Java Serialable序列化
    yield(),sleep(),join()
    线程的启动的两种方法,Runnable接口,run()的调用
    Thread的中断机制
    Oracle VM VirtualBox 修改备份位置
    潜在因子算法
    Linux--常用命令
  • 原文地址:https://www.cnblogs.com/stoneFang/p/6715325.html
Copyright © 2011-2022 走看看