真会 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

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 5 课...

  • 真会 C# 吗 03

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 6 课...

  • 真会 C# 吗 04

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 7 课...

  • 真会 C# 吗 05

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 8 课...

  • 真会 C# 吗 01

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#吗?-- C#全面教程,大致和第 4 课...

  • 真会 C# 吗

    声明 计划写一个 C# 系列教程学习笔记。内容来自微软 MVP solenovex(https://www.cnb...

  • 真会 C# 吗 10

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 08

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 09

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

  • 真会 C# 吗 06

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第1-2章 简介和基础(完结),大...

网友评论

    本文标题:真会 C# 吗 02

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