Atitit 变量类型系统 目录 1. 通用类型系统 (Common Type System) 1 1.1. CTS 的类型[编辑] 1 2. CLR支持两种基本类型:值类型和引用类型。因此,还是把
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
- 通用类型系统 (Common Type System)
定义了运行期引擎如何使用程序中的数据类型,以及如何配置数据在存储器中的一种标准,依照此种标准所撰写的编程语言,都可以在同一个运行期引擎中使用,因此它是跨语言支持的重要部分,亦即符合 CTS 规范的编程语言所撰写出的程序,都可以在 CLR 中使用。
- CTS 的类型[编辑]
CTS 定义了两种类型:
实值类型 (Value-type)
实值类型直接包含数据,而且实值类型的运行个体 (Instance) 不是在堆栈上配置,就是在结构中内嵌 (Inline) 配置。实值类型可为内置 (由运行阶段实现)、用户定义或枚举类型 (Enumeration)。
参考类型 (Reference-type)
存储变量存储器地址的参考,并且在堆积 (Heap) 上配置。参考类型可为自我描述类型、指针类型 (Pointer Type) 或接口类型 (Interface Type)。参考类型的类型可从自我描述类型的值判断出来。自我描述类型可再分为数组和类别类型。类别类型包括用户定义类型、Boxed 实值类型和委派。
- CLR支持两种基本类型:值类型和引用类型。因此,还是把MSDN这张经典视图拿出来做个铺垫。
MSDN的这张图说明了CTS中各个类型是如何相关的。注意,类型的实例可以只是值类型或自描述类型,即使这些类型有子类别也是如此。
数据来自MSDN,为的是给我们的概念中有清晰的类型概念,这是最基础也是最必须的内容。
- 值类型包含 【枚举类型】。
内置值类型(【布尔类型】、【字符型】和
)
- 引用类型体系树木
- 接口类型interface,数组类型,委托类型,类类型(object,string,class)
- 引用类型体系树2
- 指针,接口,字描述类型(数组,类类型)
- 类类型(用户类,委托,装箱的值类型)
- 值类型(包括数值类型 结构体 枚举:)
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>的别名)。
- 3. 引用类型
C#有以下一些引用类型:
- 数组(派生于System.Array)
- 用户用定义的以下类型:
- 类:class(派生于System.Object);
- 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]);
- 委托:delegate(派生于System.Delegate)。
- object(System.Object的别名);
- 字符串:string(System.String的别名)。
- 值类型和引用类型在内存中的部署
经常听说,并且经常在书上看到:值类型部署在栈上,引用类型部署在托管堆上。实际上并没有这么简单。
,局部变量valueTypeLocalVariable也是值类型,它们究竟 是在栈上还是在托管堆上?
规律是:
- 引用类型部署在托管堆上;
- 值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
- 总结
C#中,变量是值还是引用仅取决于其数据类型。
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
数组的元素,不管是引用类型还是值类型,都存储在托管堆上。
引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。为了方便,本文简称引用类型部署在托管推上。
值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
[转]理解C#值类型与引用类型 - wangyan - 博客园
Atitit 变量类型系统 目录 1. 通用类型系统 (Common Type System) 1 1.1. CTS 的类型[编辑] 1 2. CLR支持两种基本类型:值类型和引用类型。因此,还是把相关推荐
- 多态和接口(3)——设计模式(1)——方法override、CLR(Common Language Runtime 公共语言运行时)、CTS(Common Type System 公共语言系统)
1.多态就是设计模式!!!多态理解了设计模式就理解了. 2.定义坐标类,坐标类默认继承Object的ToString()方法,没有自己的特色. 3.override ToString()输出友好信息: ...
- [你必须知道的.NET] 第七回:品味类型---从通用类型系统开始
本文将介绍以下内容: .NET 基础架构概念 类型基础 通用类型系统 CLI.CTS.CLS的关系简述 1. 引言 本文不是连环画,之所以在开篇以图形的形式来展示本文主题,其实就是想更加特别的强调这几 ...
- 【C++ grammar】Enhancement for Type System (C++11 对类型系统的增强)
数据类型 (Data type) int, long int, double, struct, char *, float [], int (*f)()- 计算机程序构造块 计算机程序构造块是不同大小 ...
- python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...
https://www.xin3721.com/eschool/python.html typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints ...
- python限定方法参数类型、返回值类型、变量类型
typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...
- python限定方法参数类型、返回值类型、变量类型等
typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...
- scala的两种变量类型 var 和 val
scala的两种变量类型 var 和 valscala的两种变量类型 var 和 val 在Java中,您可以这样声明新变量: String s = "hello"; int i ...
- 内置对象的API Array数组对象 String字符串对象 json字符串 JSON对象 js作用域及变量预解析 引用类型与值类型区别 共享引用 基本包装类型 数组去重
01-内置对象的API a.Date对象获取时间 b.Array对象数组加工 c.String对象字符串加工 d.json字符串的语法格式 e.JSON对象的字符串与对象转换应用 02-JS作用域 a ...
- ABAP的数据字典DDIC和Hybris Commerce的类型系统Type system
Netweaver里所有global可用的data type定义在DDIC里.Hybris也有类似ABAP DDIC的概念,称为type system, 类型定义存在于海量的xml里.区别在于DDIC ...
- python import sql脚本_13-模块介绍-import两种方式-py文件的两种用途-模块搜索路径-项目开发的目录规范...
1.模块的介绍与使用模块import 1.1.模块的介绍 1.1.1.什么是模块? 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.在python中,模块的使用方式都是一样的,但其 ...
最新文章
- 【剑指offer-Java版】04替换空格
- 基于tcp协议的socket
- jupyterlab debugger+显示图片
- SAP S/4HANA生产订单创建之后,为什么会自动执行action
- java bitset用途_BitSet的用法
- POJ2402 Palindrome Numbers 回文数
- 通过Spring集成进行消息处理
- 创建一个国家的下拉菜单(magento2)
- qcow2磁盘格式分析
- Spring boot MultipartResolver
- 小技巧:Mac下快速锁屏
- 基于内容的图像检索概述
- st_aggrid pip下载失败问题
- ubuntu20.04装机教程
- 什么是云计算中的SaaS(软件即服务)?
- Vagrant 修改Linux虚拟机内存
- 平实给力的写作指导入门手册——leo鉴书57
- Python图算法之狄克斯特拉算法
- 关于手机输入法的一些点子
- 笔记:源码修改开放5555端口
热门文章
- pclint如何不检查头文件_衡水中学优秀班主任:考试时如何检查,才能不丢分?3个技巧...
- java集合框架的选用 若是数据量很大,0421测试题
- 中国人使用计算机互联网,发明计算机的核心专家,被美国隐瞒35年,只因是一名中国人...
- VIMrc 配置文件
- video禁止谷歌浏览器中出现的视频下载按钮
- koa使用koa-passport实现路由进入前登录验证
- Mybatis源码分析之Mapper文件解析
- .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)...
- Powershell进阶学习(1) 浅谈Powershell学习方法
- 淘宝又推新政策!所有商家视频流量免费,短视频红利来了