您的位置:知识库 »

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

作者: Anytao  来源: 博客园  发布时间: 2008-09-12 11:15  阅读: 4009 次  推荐: 0   原文链接   [收藏]  
[1] [你必须知道的.NET] 第七回:品味类型---从通用类型系统开始
[2] [你必须知道的.NET] 第七回:品味类型---从通用类型系统开始

系列文章导航:

[你必须知道的.NET] 开篇有益

[你必须知道的.NET] 第一回:恩怨情仇:is和as

[你必须知道的.NET] 第二回:对抽象编程:接口和抽象类

[你必须知道的.NET] 第三回:历史纠葛:特性和属性

[你必须知道的.NET] 第四回:后来居上:class和struct

[你必须知道的.NET] 第五回:深入浅出关键字---把new说透

[你必须知道的.NET] 第六回:深入浅出关键字---base和this

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

[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理

[你必须知道的.NET] 第九回:品味类型---值类型与引用类型(中)-规则无边

[你必须知道的.NET] 第十回:品味类型---值类型与引用类型(下)-应用征途

[你必须知道的.NET] 第十一回:参数之惑---传递的艺术(上)

[你必须知道的.NET] 第十二回:参数之惑---传递的艺术(下)

[你必须知道的.NET] 第十三回:从Hello, world开始认识IL

[你必须知道的.NET] 第十四回:认识IL代码---从开始到现在

[你必须知道的.NET] 第十五回:继承本质论

[你必须知道的.NET] 第十六回:深入浅出关键字---using全接触

[你必须知道的.NET] 第十七回:貌合神离:覆写和重载

[你必须知道的.NET] 第十八回:对象创建始末(上)

[你必须知道的.NET] 第十九回:对象创建始末(下)

[你必须知道的.NET]第二十回:学习方法论

[你必须知道的.NET]第二十一回:认识全面的null

[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


  本文将介绍以下内容:

  • .NET 基础架构概念

  •  类型基础

  •  通用类型系统

  •  CLI、CTS、CLS的关系简述

  1. 引言

  本文不是连环画,之所以在开篇以图形的形式来展示本文主题,其实就是想更加特别的强调这几个概念的重要性和关注度,同时希望从剖析其关系和联系的角度来讲述.NET Framework背后的故事。因为,在作者看来想要深入的了解.NET,必须首先从了解类型开始,因为CLR技术就是基于类型而展开的。而了解类型则有必要把焦点放在.NET类型体系的公共基础架构上,这就是:通用类型系统(Common Type System, CTS)。

  我之所以将最基本的内容以独立的章节来大加笔墨,除了为后面几篇关于对类型这一话题深入讨论做以铺垫之外,更重要的是从论坛上、博客间,我发现有很多同行对.NET Framework基础架构的几个重要体系的理解有所偏差,因此很有必要补上这一课,必备我们在深入探索知识的过程中,能够游刃有余。

  2. 基本概念

还是老套路,首先引入MSDN对通用类型系统的定义,通用类型系统定义了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分。通用类型系统执行以下功能:

  •  建立一个支持跨语言集成、类型安全和高性能代码执行的框架。 

  •  提供一个支持完整实现多种编程语言的面向对象的模型。

  •  定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用。

  那么我们如何来理解呢?

  还是一个现实的场景来引入讨论吧。小王以前是个VB迷,写了一堆的VB.NET代码,现在他变心了,就投靠C#的阵营,因为流行嘛。所以当然就想在当前的基于C#开发的项目中,应用原来VB.NET现成的东西,省点事儿:-)。那么CLR是如何来实现类型的转换的,例如Dim i as Single变量i,编译器会自动的实现将i由Single到float的映射,当然其原因是所有的.NET编译器都是基于CLS实现的。具体的过程为:CTS定义了在MSIL中使用的预定义数据类型,.NET语言最终都要编译为IL代码,也就是所有的类型最终都要基于这些预定义的类型,例如应用ILDasm.exe分析可知,VB.NET中Single类型映射为IL类型就是float32,而C#中float类型也映射为float32,由此就可以建立起VB.NET和C#的类型关系,为互操作打下基础。

Code

  过去,由于各个语言在类型定义方面的不一致,造成跨语言编程实现的难度,基于这一问题,.NET中引入CTS来解决各个编程语言类型不一致的问题,类型机制使得多语言的代码可以无缝集成。因此CTS也成为.NET跨语言编程的基础规范,为多语言的互操作提供了便捷之道。可以简单的说,基于.NET的语言共同使用一个类型系统,这就是CTS。

  进一步的探讨通用类型系统的内容,我们知道CTS支持两种基本的类型,每种类型又可以细分出其下级子类,可以以下图来表示:

  .NET提供了丰富的类型层次结构,从上图中也可以看出该层次结构是基于单继承层次实现的,反映了.NET面向对象原则中实现单继承、接口多继承的特点。关于值类型和引用类型,是之后要探讨的重点内容,也是『品味类型』子系列的重中之重,在此不作进一步探讨,但是上面的这张图有必要清楚的印在心中,因为没有什么比这个更基础的了。

[第1页][第2页]
0
0

热门文章

    最新文章

      最新新闻

        热门新闻