《从LRS项目重构来看“数据类型”——(第二话)局部类型推理(一)》

来源:互联网 发布:pid控制算法和图解 编辑:程序博客网 时间:2024/05/16 05:42

在讲类型推理之前,首先得讲一下几个概念:

1、早期绑定:如果在申明变量的时候显式的申明了类型,那么在将对象分配给对象变量时,Visual Basic 编译器会执行一个名为 binding 的进程,将对象分配给声明为特定对象类型的变量,则该对象为“早期绑定”。 早期绑定对象允许编译器在应用程序执行前分配内存以及执行其他优化。

例如:`dim strTest as string ’定义一个类型为string的变量`,此时是显示申明,也就是早期绑定。

2、后期绑定:其实就是前面说的咱们在申明一个变量时不指定类型,vb.net中默认是object类型(它是一种引用类型,这个里面可以存放任何类型的引用,包括值类型的数据的引用。)此时我们说这个变量属于后期绑定。简单来说,就是在程序运行前指定数据类型叫前期绑定,运行过程中动态指定类型就是后期的绑定。从上可知,虽然,定义的初期没有给出类型,程序也能运行。但是效率很低,因为这个涉及到数据类型的后期绑定问题,后期绑定变量中的所有数据都必须包装为类型 Object,在运行时访问该类型的成员,会使得程序运行较慢。

3、强类型:为所有变量指定具体的数据类型就称之为强类型。(注意:object也是一种具体的类型,它是vb.net中的默认类型)

接下来看什么是“类型推理”:

官方的解释: 类型推理是指编译器将通过初始化表达式的类型推断出变量类型的过程。

我个人的理解:就是不申明变量的类型,编译器将通过自己的规则去推理判断你需要的是何种类型数据。并将变量设置成强类型,也就是为你指定一种具体的数据类型。

类型推理其实很像前面讲到的后期绑定,因为你这里也没有指定变量的数据类型。但是和后期绑定不一样的地方的是:我们的编译器会在编译时(而非运行时)生成早期绑定代码

光说不练也是假把式:直接上Demo(准备工作,首先新建一个项目,添加2个类,分别是ClassA,ClassB)

具体代码如下:

Public Class ClassA    Public Sub GetTypeByInference()        Dim b As New ClassB        Dim UnKnowType = b.TypeInference    End SubEnd Class


Public Class ClassB    Public Function TypeInference() As Integer    End Function    Public Function TypeInference2() As String    End Function    Public Function TypeInference3() As Decimal    End FunctionEnd Class

此时,我们调用的是对象b的TypeInference方法,该方法的返回值是Integer。

你把光标移动到UnKnownType这个未定义任何类型的变量上,你就发现下面的效果。


下面,咱们接着试验,我们调用一下b的TypeInference2方法,该方法的返回值是string类型,看是什么效果。


从上面两个图片中效果我们可以看出来,我们的编译器非常聪明的根据方法的返回值类型判断出了变量的类型,并进行了类型的绑定(前期绑定)。

下面咱们想个办法稍微动一下手脚,让他看傻眼……

预知试验情况如何,请看下篇博客《从LRS项目中来看“数据类型”——第二话,类型推理(二)》

  

0 0
原创粉丝点击