在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C#类型主要分为两类:值类型和引用类型。C#主要类型如下:
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种状态:装箱和未装箱;引用类型只有一种形式:装箱。 |
请发表评论