【C#/笔记】数据类型

数据类型

C#中所有的类型最终都派生自基类System.Object

  • 值类型
    1. 值类型最终派生自基类System.ValueType。
    2. 值类型主要包括结构枚举两类。
      常用结构类型:Int32(int),Single(float),Double(double),Boolean(bool)及自定义结构类型等。
      枚举类型如:FontStyle.
  • 引用类型
    1. 所有称为类的类型都是引用类型。
    2. 常用这几个关键字来声明:Class,Interface,Delegate
    3. String是引用类型而非值类型。
  • 预定义值类型与引用类型

    注:在C#中几种基本声明类型和对应的实际类命名并不相同。

    C#关键字 .NetCTS类型 类型 位数 值范围
    sbyte System.SByte 整数 8位 -128~127
    byte System.Byte 整数 8位 0~255
    short System.Int16 整数 16位 -32768~32767
    ushort System.UInt16 整数 16位 0~65535
    int System.Int32 整数 32位 -2^31~(2^31)-1
    uint System.UInt32 整数 32位 0~2^32
    long System.Int64 整数 64位 -2^63~(2^63)-1
    ulong System.UInt64 整数 64位 0~2^64
    float System.Single 浮点 32位 ±1.5 × 10^-45 ~ ±3.4 × 10^38 精度为7位
    double System.Double 浮点 64位 ±5.0 × 10^-324 ~ ±1.7 × 10^308 精度为15~16位
    decimal System.Decimal 高精度 128位 ±1.0 × 10^-28 ~ ±7.9 × 10^28 精度为28~29位
    bool System.Boolean 布尔 1位 true或false
    char System.Char 整数 16位 16位Unicode字符
    object System.Object 对象
    string System.String 字符串
  • 区别

    1. 存储值类型的变量直接包含值,而引用类型则是包含一个对象实例的引用。
      因此在使用变量赋值给另一个变量时,值类型会复制包含的值,引用类型则复制引用。
    2. 值类型是隐式密封的,不能派生其他类型。
    3. 内存分配不同。
  • 内存分配
    引用类型使用new操作符创建。
    创建过程:

    1. 计算目标类及其父类实例所需字节数和一些额外信息(如对象指针、同步索引块等)
    2. 在托管堆上分配内存空间
    3. 初始化对象的类型对象指针及同步索引块
    4. 调用当前类型的实例构造器及基类构造器
    5. 返回新建类型的引用

    值类型一般分配在线程栈上,根据一些特殊需要,值类型也可能分配在托管堆上
    如以下几种情况:

    1. 数组中的元素
    2. 引用类型中的值类型字段
    3. 迭代器块中的局部变量
    4. 闭包情况下匿名函数的局部变量
    5. 其他
  • Unity中几个重要的类

    1. UnityEngine.Object:C#脚本最基本的类。
    2. UnityEngine.Component:所有能添加到游戏对象上的组件的基类。
    3. UnityEngine.MonoBehaviour:派生自Behaviour类,也是Unity中所有C#脚本默认显式继承的父类。脚本中的生命周期函数只有在继承MonoBehaviour并挂在到游戏对象上时才会生效。
    4. UnityEngine.GameObject:所有场景中实例的基类,获取游戏对象信息的主要手段。
    5. UnityEngine.Transform:处理游戏对象位置,大小,旋转角度相关信息,且常用于处理游戏对象父子级关系。
    6. UnityEngine.Rigidbody:物理模拟相关的效果处理。
    7. UnityEngine.Collider:所有碰撞器的基类。
    8. 其他如Time、Renderer、ParticleEmitter等等包括其他命名空间的就不一一列举了。

    凡是继承MonoBehaviour及MonoBehaviour本身都无法通过new关键字来实例化。一般通过AddComponent()创建脚本实例,使用GetComponent()访问脚本组件

  • Unity中几个重要的值类型

    1. UnityEngine.Vector2、Vector3、Vector4:用来表示向量,可以进行点乘(Dot)和差乘(Cross)计算,来直接或间接获取一些常用信息,且提供了一些常用向量。
    2. UnityEngine.Mathf:包含大量常用数学计算公式。
    3. UnityEngine.Color:包含许多常用颜色,可以通过new创建任意颜色的实例。
    4. System.DateTime:用于日期读取和计算,虽然不是Unity自带的结构,但也比较常用。
    5. 其他:如Ray、RaycastHit、Touch、Rect …等等

    关于值类型与引用类型的其他知识放在各个相关部分笔记中再详述。

    参考资料:

    1. 《Unity3d脚本编程》—陈嘉栋
    2. 官方文档

你可能感兴趣的:(Unity,C#,数据类型,C#,引用类型,值类型)