Atitit 变量类型系统

目录

1. 通用类型系统 (Common Type System) 1

1.1. CTS 的类型[编辑] 1

2. CLR支持两种基本类型:值类型和引用类型。因此,还是把MSDN这张经典视图拿出来做个铺垫。 1

3. 值类型包含  【枚举类型】。 3

4. 引用类型体系树木 3

4.1. 接口类型interface,数组类型,委托类型,类类型(object,string,class) 3

5. 引用类型体系树2 3

5.1. 指针,接口,字描述类型(数组,类类型) 3

5.2. 类类型(用户类,委托,装箱的值类型) 3

6. 值类型(包括数值类型 结构体 枚举:) 3

7. 3. 引用类型 4

8. 值类型和引用类型在内存中的部署 4

9. 总结 4

  1. 通用类型系统 (Common Type System) 

定义了运行期引擎如何使用程序中的数据类型,以及如何配置数据在存储器中的一种标准,依照此种标准所撰写的编程语言,都可以在同一个运行期引擎中使用,因此它是跨语言支持的重要部分,亦即符合 CTS 规范的编程语言所撰写出的程序,都可以在 CLR 中使用。

  1. CTS 的类型[编辑]

CTS 定义了两种类型:

实值类型 (Value-type)

实值类型直接包含数据,而且实值类型的运行个体 (Instance) 不是在堆栈上配置,就是在结构中内嵌 (Inline) 配置。实值类型可为内置 (由运行阶段实现)、用户定义或枚举类型 (Enumeration)。

参考类型 (Reference-type)

存储变量存储器地址的参考,并且在堆积 (Heap) 上配置。参考类型可为自我描述类型、指针类型 (Pointer Type) 或接口类型 (Interface Type)。参考类型的类型可从自我描述类型的值判断出来。自我描述类型可再分为数组和类别类型。类别类型包括用户定义类型、Boxed 实值类型和委派。

  1. CLR支持两种基本类型:值类型引用类型。因此,还是把MSDN这张经典视图拿出来做个铺垫。

MSDN的这张图说明了CTS中各个类型是如何相关的。注意,类型的实例可以只是值类型或自描述类型,即使这些类型有子类别也是如此。

数据来自MSDN,为的是给我们的概念中有清晰的类型概念,这是最基础也是最必须的内容。

  1. 值类型包含  【枚举类型】。

内置值类型(【布尔类型】、【字符型】和

  1. 引用类型体系树木

    1. 接口类型interface,数组类型,委托类型,类类型(object,string,class)
  2. 引用类型体系树2
    1. 指针,接口,字描述类型(数组,类类型)
    2. 类类型(用户类,委托,装箱的值类型)
  3. 值类型包括数值类型 结构体 枚举:

C#的所有值类型均隐式派生自System.ValueType:

  • 结构体:struct(直接派生于System.ValueType);

    • 数值类型:

      • 整 型:sbyte(System.SByte的别名),short(System.Int16),int(System.Int32),long (System.Int64),byte(System.Byte),ushort(System.UInt16),uint (System.UInt32),ulong(System.UInt64),char(System.Char);
      • 浮点型:float(System.Single),double(System.Double);
      • 用于财务计算的高精度decimal型:decimal(System.Decimal)。
    • bool型:bool(System.Boolean的别名);
    • 用户定义的结构体(派生于System.ValueType)。
  • 枚举:enum(派生于System.Enum);
  • 可空类型(派生于System.Nullable<T>泛型结构体,T?实际上是System.Nullable<T>的别名)。
  1. 3. 引用类型

C#有以下一些引用类型:

  • 数组(派生于System.Array)
  • 用户用定义的以下类型:
    • 类:class(派生于System.Object);
    • 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]);
    • 委托:delegate(派生于System.Delegate)。
  • object(System.Object的别名);
  • 字符串:string(System.String的别名)。
  1. 值类型和引用类型在内存中的部署

经常听说,并且经常在书上看到:值类型部署在栈上,引用类型部署在托管堆上。实际上并没有这么简单。

,局部变量valueTypeLocalVariable也是值类型,它们究竟 是在栈上还是在托管堆上?

规律是:

  • 引用类型部署在托管堆上;
  • 值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
  1. 总结

C#中,变量是值还是引用仅取决于其数据类型。

C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。

C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

数组的元素,不管是引用类型还是值类型,都存储在托管堆上。

引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。为了方便,本文简称引用类型部署在托管推上。

值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。

值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。

[转]理解C#值类型与引用类型 - wangyan - 博客园

Atitit 变量类型系统 目录 1. 通用类型系统 (Common Type System) 1 1.1. CTS 的类型[编辑] 1 2. CLR支持两种基本类型:值类型和引用类型。因此,还是把相关推荐

  1. 多态和接口(3)——设计模式(1)——方法override、CLR(Common Language Runtime 公共语言运行时)、CTS(Common Type System 公共语言系统)

    1.多态就是设计模式!!!多态理解了设计模式就理解了. 2.定义坐标类,坐标类默认继承Object的ToString()方法,没有自己的特色. 3.override ToString()输出友好信息: ...

  2. [你必须知道的.NET] 第七回:品味类型---从通用类型系统开始

    本文将介绍以下内容: .NET 基础架构概念 类型基础 通用类型系统 CLI.CTS.CLS的关系简述 1. 引言 本文不是连环画,之所以在开篇以图形的形式来展示本文主题,其实就是想更加特别的强调这几 ...

  3. 【C++ grammar】Enhancement for Type System (C++11 对类型系统的增强)

    数据类型 (Data type) int, long int, double, struct, char *, float [], int (*f)()- 计算机程序构造块 计算机程序构造块是不同大小 ...

  4. python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/python.html typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints ...

  5. python限定方法参数类型、返回值类型、变量类型

    typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...

  6. python限定方法参数类型、返回值类型、变量类型等

    typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...

  7. scala的两种变量类型 var 和 val

    scala的两种变量类型 var 和 valscala的两种变量类型 var 和 val 在Java中,您可以这样声明新变量: String s = "hello"; int i ...

  8. 内置对象的API Array数组对象 String字符串对象 json字符串 JSON对象 js作用域及变量预解析 引用类型与值类型区别 共享引用 基本包装类型 数组去重

    01-内置对象的API a.Date对象获取时间 b.Array对象数组加工 c.String对象字符串加工 d.json字符串的语法格式 e.JSON对象的字符串与对象转换应用 02-JS作用域 a ...

  9. ABAP的数据字典DDIC和Hybris Commerce的类型系统Type system

    Netweaver里所有global可用的data type定义在DDIC里.Hybris也有类似ABAP DDIC的概念,称为type system, 类型定义存在于海量的xml里.区别在于DDIC ...

  10. python import sql脚本_13-模块介绍-import两种方式-py文件的两种用途-模块搜索路径-项目开发的目录规范...

    1.模块的介绍与使用模块import 1.1.模块的介绍 1.1.1.什么是模块? 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.在python中,模块的使用方式都是一样的,但其 ...

最新文章

  1. 【剑指offer-Java版】04替换空格
  2. 基于tcp协议的socket
  3. jupyterlab debugger+显示图片
  4. SAP S/4HANA生产订单创建之后,为什么会自动执行action
  5. java bitset用途_BitSet的用法
  6. POJ2402 Palindrome Numbers 回文数
  7. 通过Spring集成进行消息处理
  8. 创建一个国家的下拉菜单(magento2)
  9. qcow2磁盘格式分析
  10. Spring boot MultipartResolver
  11. 小技巧:Mac下快速锁屏
  12. 基于内容的图像检索概述
  13. st_aggrid pip下载失败问题
  14. ubuntu20.04装机教程
  15. 什么是云计算中的SaaS(软件即服务)?
  16. Vagrant 修改Linux虚拟机内存
  17. 平实给力的写作指导入门手册——leo鉴书57
  18. Python图算法之狄克斯特拉算法
  19. 关于手机输入法的一些点子
  20. 笔记:源码修改开放5555端口

热门文章

  1. pclint如何不检查头文件_衡水中学优秀班主任:考试时如何检查,才能不丢分?3个技巧...
  2. java集合框架的选用 若是数据量很大,0421测试题
  3. 中国人使用计算机互联网,发明计算机的核心专家,被美国隐瞒35年,只因是一名中国人...
  4. VIMrc 配置文件
  5. video禁止谷歌浏览器中出现的视频下载按钮
  6. koa使用koa-passport实现路由进入前登录验证
  7. Mybatis源码分析之Mapper文件解析
  8. .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)...
  9. Powershell进阶学习(1) 浅谈Powershell学习方法
  10. 淘宝又推新政策!所有商家视频流量免费,短视频红利来了