• 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种状态:装箱和未装箱;引用类型只有一种形式:装箱。

  • 相关阅读:
    tomcat 登录主页成功 点击Manager App 401 等问题
    servlet
    jsp 记录1 bs/cs
    java jar
    Java 第四课 对象 类
    java 第五课 异常
    Java 第三课 数组排序
    java 第二课 标识符
    java 第一课 笔记
    maven 项目问题集锦
  • 原文地址:https://www.cnblogs.com/PaulMa/p/1863569.html
Copyright © 2020-2023  润新知