最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

C#、TS和Dart对比4.1:类型概述

来源:博客园


(资料图)

类型在编程开发语言中,占据核心位置,甚至可以简单的概况为:编程开发,就是在定义和使用类。无论是C#,还是TS或Dart,都有一个庞大的类型系统,包括框架内置类、框架预定义类库、第三方类库以及自定义类。我们应该对类型系统进行合理的划分,并针对每种类型,采取不一样的学习方式。对于类型的划分,大体有两种方式:

1、技术型,从数据在内存中的存储和使用原理来划分:

  • 值类型:①只需要一段内容,存储实际数据;②存储在栈中,效率更高;③根据不同的值类型,分配不同的内存大小;④值类型一般包括数值、布尔、字符。
  • 引用类型:①需要两段内容,一段在堆中,存储实际数据,一段在栈中,存储一个内存地址,这个地址指向数据在堆中存放的位置,称之为引用;②引用类型存放在堆中的实际数据,也有值类型和引用类型,其中引用类型也是以两段内存的方式存储,但引用和实际数据都存储在堆里;③除了数据、布尔和字符三种值类型外,其它类型基本上都是引用类型,包括字符串,字符串可以认为是由字符组成的数组。
  • 函数/方法的特殊之处:①函数也是引用类型,但定义时,堆中只存放了代码片断,并没有为参数和方法体中的变量分配内存空间;②只有在调用方法时,才分配内存空间给参数和变量,并在执行完方法后立即释放(闭包比较特殊,后面再说)。
  • 总结:原理性的东西,点到为止,有兴趣可以自行深入。掌握原理,对一些类型使用的理解,会很有帮助,但从实际开发来看,一是这些难理解的使用占比还是少,二是先死记住用法也不耽误开发。

2、实用型,从应用开发的实际出发来划分,也是学习的建议方式:

  • 基本类型:数值、布尔、字符/字符串
  • 集合类型:列表类集合、键值对类集合
  • 特殊类型:如C#的object/dynamic/type*,TS的object/null/undefined/any/void/never/Symbol、Dart的object/dynamic/Function/Symbol
  • 自定义类型:类、接口、枚举、结构体。委托也是一种自定义类,但还是建议放到方法里,更易理解
  • 常用预定义类库:字符串、日期、数学、正则、JSON、迭代集合、文件操作、Web请求
  • 总结:基本类型、集合类型和特殊类型,是开发语言的核心,一般都内置在核心库里,需要全部熟练掌握。自定义类型,是我们在应用开发过程中,根据业务需求定义的类型,为什么说面向对象适合开发大型应用,理由就在于此,对于如何自定义和使用类,应该要熟练掌握。而常用预定义类库,是由语言本身,在基本类型/集合类型/特殊类型的基础上,为我们扩展定义的工具类库,能够有效提升我们的开发效率,也是应该掌握的。另外,开发框架(如AspNetCore)提供的类库,以及第三方类库,可以在具体使用某个框架时,查阅文档掌握。

关键词: 引用类型 集合类型 基本类型