C#、TS和Dart对比4.1:类型概述
类型在编程开发语言中,占据核心位置,甚至可以简单的概况为:编程开发,就是在定义和使用类。无论是C#,还是TS或Dart,都有一个庞大的类型系统,包括核心的内置类、语言的预定义类库、框架的预定义类、第三方类库以及自定义类。通过对类型系统进行合理的划分,并针对每种类型,采取不一样的学习方式,将有利于掌握这个判定的知识体系。对于类型的划分,大体有两种方式:
一、技术型,从数据在内存中的存储和使用原理来划分:
1、值类型:
- ①只需要一段内容,存储实际数据;
- ②存储在栈中,效率更高;
- ③根据不同的值类型,分配不同的内存大小;
- ④值类型一般包括数值、布尔、字符。
2、引用类型:
- ①需要两段内存,一段在堆中,存储实际数据,一段在栈中,存储内存地址,这个地址指向数据在堆中存放的位置,称之为引用;
- ②引用类型存放在堆中的实际数据,也有值类型和引用类型。引用类型也是两段内存方式,但引用和实际数据都存储在堆里;
- ③除了数据、布尔和字符三种值类型外,其它类型基本上都是引用类型,包括字符串,字符串可以认为是由字符组成的数组。
3、函数/方法的特殊之处:
- ①函数也是引用类型,但定义时,堆中只存放了代码片断,并没有为参数和方法体中的变量分配内存空间;
- ②只有在调用方法时,才分配内存空间给参数和变量,并在执行完方法后立即释放(闭包比较特殊,后面再说)。
4、总结:
- ①原理性的东西,点到为止,有兴趣可以自行深入。掌握原理,对一些类型使用的理解,会很有帮助
- ②暂时不理解也没关系,不影响学习和开发。日后,随着基础越来越扎实,难点会被顺其自然的突破
二、实用型,从应用开发的实际出发来划分,也是学习的建议方式:
1、基本类型:
- 数值
- 布尔
- 字符/字符串
2、集合类型:
- 列表类集合
- 键值对类集合
3、特殊类型:
- C#的object/dynamic/type*
- TS的null/undefined/any/void/never/Symbol/object/function
- Dart的object/dynamic/Function/Symbol
4、自定义类型:
- 枚举-C#/TS/Dart
- 类-C#/TS/Dart
- 接口-C#/TS/Dart
- 泛型-C#/TS/Dart
- 结构体-C#
- 委托-C#(本质是一种自定义类,但建议放到方法里,更易理解)
- 类型别名-TS
5、常用预定义类库:
- 日期
- 数学
- 正则
- JSON
- 迭代集合
- 文件操作
- Web请求
6、总结:
- 基本类型、集合类型和特殊类型,是开发语言的核心,一般都内置在核心库里,需要全部熟练掌握。
- 自定义类型,是我们在应用开发过程中,根据业务需求定义的类型,为什么说面向对象适合开发大型应用,理由就在于此,对于如何自定义和使用类,应该要熟练掌握。
- 常用预定义类库,是由语言本身,在基本类型/集合类型/特殊类型的基础上,为我们扩展定义的工具类库,能够有效提升我们的开发效率,也是应该掌握的
- 开发框架(如AspNetCore)提供的类库,以及第三方类库,可以在具体使用某个框架时,查阅文档掌握