Foxtable(狐表)用户栏目专家坐堂 → 这样的定义 方式也行


  共有11953人关注过本帖树形打印复制链接

主题:这样的定义 方式也行

帅哥哟,离线,有人找我吗?
lxl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/8/19 20:57:00 [显示全部帖子]

这里要小心了。

在2.0的编译器下 (VS2005)

Dim s 其实是不规范的写法,他是Dim s  As Object的缩写

        Dim s = 1  '完全等效于 Dim s  As Object = 1
        Output.Show(s.Gettype().ToString())
        s = "sdfd"
        Output.Show(s.Gettype().ToString())

 

因为s是一个Object类型。所以它能保存你赋值的各种类型。

 

 

但是在3.5的编译器下  (vs2008)

Dim s As Object就不能缩写成Dim s,必须写完整,原因写在楼下。

有兴趣,又不怕脑袋被弄糊涂的继续往下看)

 



 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/8/19 21:04:00 [显示全部帖子]

原因是在3.5编译器下

Dim s有了新的意思。 不再是Dim s As Object的缩写。

 

 

Dim s = "123"  等价于 Dim s As String = "123"

Dim s = 123      等价于  Dim s As Integer = 123

Dim s = new SQLCommand()  等价于 Dim s = new SQLCommand()

也就是类型推断功能,根据等号右边的值,确定了左边变量的类型。(以前左边变量是一个Object 类型)

 

 

因此,以前的写法

        Dim s = 1  

        Output.Show(s.Gettype().ToString())
        s = "sdfd"
        Output.Show(s.Gettype().ToString())

升级到VS2008项目的时候就会出错。

因为Dim s = 1  之后 s只能存放Integer 再存放"sdfd"就会报错

[此贴子已经被作者于2010-8-19 21:23:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/8/19 22:39:00 [显示全部帖子]

以下是引用cxabc123在2010-8-19 22:17:00的发言:
其实要的就是这种效果,老大如果早告诉,有些代码就简单多了
[此贴子已经被作者于2010-8-19 22:18:29编辑过]

非常不推荐 Dim s = 123 缩写,

他等于 Dim s As Object = 123

因为这里进行了装箱(值类型,包装成引用类型 Object)

 

不行你拿1000行数据来对比一下就知道。

1000次装箱拆箱,效率影响很明显

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/8/19 22:57:00 [显示全部帖子]

下面代码的结果值是900 如果去掉红字部分 是1100 

也就是差不多20%的效率影响

 

 

Dim t1 As Integer =  Environment.TickCount
Dim sum As Integer = 123456789
For i As Integer = 0 To 10000000
    sum = sum ^ 0.5
Next
Dim t2 As Integer =  Environment.TickCount
Output.Show(t2-t1)

不过运行很快的情况下,慢20%也没人能感觉出来,呵呵

[此贴子已经被作者于2010-8-19 22:57:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/8/19 23:05:00 [显示全部帖子]

baidu一下 “装箱 拆箱”

有很多解释的很好的


 回到顶部