真会 C# 吗 02

作者: JeetChan | 来源:发表于2019-05-11 18:41 被阅读8次

    声明

    本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 5 课—— 基础 - 转换、值类型和引用类型、内置类型分类(入门) 对应。

    本文主要包括以下内容:

    1. 转换

    2. C# 类型分类

    转换

    C# 里,互相兼容的类型实例间可以相互转换。
    转换总是从现有的值创建出来一个新的值。转换包括隐式 vs. 显式转换。

    隐式转换自动发生,隐式转换的两个必要条件:1. 编译器可以保证转换会成功;2. 信息不会有损失。

    显式转换需要手动进行,有可能被截断。显式转换的两个条件只要任意一个成立即可。编译器不能保证转换会成功;信息可能会有损失。

    如果编译器可以断定转换肯定会失败,那么两种转换都会被禁止。

    int x = 12345; // int is a 32-bit integer
    long y = x; // Implicit conversion to 64-bit integer
    short z = (short)x; // Explicit conversion to 16-bit integer
    

    C# 类型分类

    C# 内置类型分为:1. 值类型,2. 引用类型,3. 范围类型参数,4. 指针类型。可以通过内置类型创建自己的自定义类型。

    值类型和引用类型的根本区别在于处理内存的方式。

    内置类型的分类

    1. 值类型

      • signed integer(sbyte,short,int,long)
      • unsigned integer(byte,ushort,uint,ulong)
      • 实数(float,double,decimal)
      • 逻辑(bool)
      • 字符(char)
    2. 引用类型

      • 字符串(string)
      • 对象(object)

    内置类型在 System 命名空间,除了 decimal 之外的内置类型叫做原始类型,通过指令,在编译的代码里直接被支持,通常被翻译成底层处理器直接的支持;System.IntPtr 和 System.UIntPtr 也是原始类型。

    值类型

    包含所有的内置类型(数值,字符,bool)和自定义的 struct 和 enum
    引用类型包含所有的 class,数组,delegate,interface 类型。

    值类型实例的赋值动作总是复制了该实例。值类型变量/常量的内容就是一个值。使用 struct 关键字可以创建自定义的值类型。

    值类型的存储的开销,值类型的实例所占的内存 = 它的字段需要内存的总和。CLR 会把类型的字段大小设置为该字段实际大小的整数倍。

    public struct Point { public int X, Y; }

    Point struct

    引用类型

    引用类型的存贮方式分两部分,包含对象和对象的引用。引用类型的常量/变量的内容就是一个含有值的对象的引用。

    给引用类型的变量赋值,复制引用而不是对象实例。允许多个变量引用同一个对象。

    引用类型的存储的开销,需要为引用和对象单独分配内存;对象所占内存 = 其字段所占内存总和 + 额外的管理开销(最少 8 字节);每个对象的引用还需要额外的 4 或 8 个字节, (根据平台是 32 位或是 64 位)

    null 关键字

    null 关键字是表示不引用任何对象的空引用的文字值。 null 是引用类型变量的默认值。 普通值类型不能为 null。 但是,C# 2.0 引入了可以为 null 的值类型。

    public class Point { public int X, Y; }

    Point class

    参考

    Built-in types table (C# Reference)

    Types (C# Programming Guide)

    相关文章

      网友评论

        本文标题:真会 C# 吗 02

        本文链接:https://www.haomeiwen.com/subject/okkfaqtx.html