zoukankan      html  css  js  c++  java
  • C#类型理解

      C#类型主要分为两类:值类型和引用类型。C#主要类型如下:

    类别

    描述

    值类型

    简单类型

    有符号整形:sbyte,short,int,long

    无符号整形:byte,ushort,uint,ulong

    Unicode字符:char

    IEEE浮点型:float,double

    高精度小数:decimal

    布尔型:bool

    枚举类型

    用户自定义类型:enum

    结构类型

    用户自定义类型:struct

    引用类型

    类类型

    所有其他类型基类:object

    Unicode字符串:string

    用户自定义类型:class

    接口类型

    用户自定义类型:interface

    数组类型

    单维多维数组:int[],int[,]

    委托类型

    用户自定义类型:delegate

      C#值类型和引用类型的区别:

      1、定义:值类型(Value Type)实例通常分配在线程的堆栈(stack)上,不包含任何指向实例数据的指针,变量本身就包含了实例数据。值类型的实例要么在堆栈上,要么内联在结构上。值类型包括:简单类型,结构体类型和枚举类型。

      引用类型(Reference Type)实例分配在托管堆(managed heap)上,变量保存了实例数据的内存引用。引用类型存储对值的内存地址的引用,位于堆上。引用类型包括:类类型,数组,委托类型和接口类型。

      2、内存概况:值类型分配在堆栈上,每实例一个值类型则在堆栈上分配一个内存地址,不同的变量占用了不同的堆栈地址,改变一个变量不会影响其他变量。

      引用类型在堆栈中只是保存了其实例数据的引用地址,实际的数据保存在托管堆中,所以可能不同的变量保存了同一地址的数据引用,改变一个变量会影响另一个变量的值。

      3、嵌套结构:引用类型嵌套值类型时,作为引用类型实例的一部分也会被分配到托管堆上。

      值类型嵌套引用类型时,引用类型作为值类型的成员变量,堆栈上保存该成员的引用,而成员的实际数据还是保存在托管堆上。即值类型实例总是分配在它声明的地方,声明为局部变量时内存被分配在堆栈上,声明为引用类型成员变量时内存被分配到托管堆上;引用类型总是分配在托管堆上。

      4、值类型继承自ValueType,引用类型继承于object。

      5、值类型的内存不由GC控制,作用域结束时,值类型会自动释放,减少托管堆的压力,具有性能优势。而引用类型的内存分配与回收都由GC来完成。

      6、值类型时密封的,不能作为基类,但可以单继承或者多继承接口。引用类型一般可以继承。

      7、值类型不具有多态,引用类型具有多态。

      8、值类型不能为null,会自动初始化为0;引用类型默认初始化为null,表示没有指向任何托管堆的引用地址。

      9、值类型由2种状态:装箱和未装箱;引用类型只有一种形式:装箱。

  • 相关阅读:
    关闭当前的子窗口,刷新父窗口,弹出层提示框
    让一个div层于窗口中间位置
    一些技术贴,留待以后研究
    什么才是程序员的核心竞争力?
    自己喜欢的编辑器字体设置
    Ajax请求状态200,却走error的函数
    20141110的alltosun面试
    匹配中文的正则表达式
    数据表损坏:Incorrect key file for table
    oracle union 和 union all
  • 原文地址:https://www.cnblogs.com/PaulMa/p/1863569.html
Copyright © 2011-2022 走看看