了解Visual Basic中的变量

时间:2009-03-17 17:18:11

标签: vb.net variables variant

如果我不声明变量的类型,主要问题是什么?比如,Dim var1Dim var1 as Integer

5 个答案:

答案 0 :(得分:7)

在允许您使用变体类型的语言中声明变量类型的主要原因是检查自己。如果你有一个变量用于保存一个字符串,然后偶然将它传递给一个需要整数的函数,编译器就无法告诉你搞砸了,除非你告诉该变量应该始终是一个字符串。相反,你坚持把你的字符串重新解释为一个整数,这几乎永远不会给你你想要的东西,结果可能会令人困惑,而且很难找到错误。

在几乎所有语言中都有很多构造,你可以把它放在一边,你的程序可以工作,但作为对程序员的检查存在。编译器的第一项工作是将您的代码变为可执行文件。但编译器的第二项工作是尽可能地尝试确保程序员没有犯错误。特别是当程序变大时,让编译器发现这样的错误更容易,而不是相信你输入的内容完全正确。

此外,通常会有一些与变体相关的处理开销,但这是一个较小的问题。

答案 1 :(得分:3)

有几个原因:

  • 大大提高了类型安全性。
  • 降低认知开销;编译器和智能感知可以帮助你。
  • 降低性能开销;将事物转换为Variant类型的事物有一个很小但非常重要的成本。
  • 无需命名疣(例如,lblTitle告诉您某些内容应该包含Label)。
  • 将某些类型的运行时错误移动到编译时错误,这是一个很大的生产力胜利。

答案 2 :(得分:1)

其他人已经提到过Intellisense,但是值得重复。

此外,当您为变量声明显式类型时,编译器可以对您的代码执行各种额外的类型检查和验证,否则这些都是不可能的。现在发生的是,现在某些非常常见的错误在编译时而不是运行时被捕获并修复。用户永远不会看到它们。您不希望为运行时留下错误。

你说“它可能是任何东西” - 这是真的。但是你继续说“所以一定要好”。这不一定遵循,而且非常危险。并非一切都可以分配或与其他一切相结合。它可以是任何东西 - 但它某种东西,或者更具体的东西。如果没有显式类型,编译器无法知道什么,也无法帮助您避免错误。

答案 3 :(得分:0)

从表面上看,如果你没有声明类型,Intellisense无法帮助你,因为它不知道它是什么类型。

答案 4 :(得分:0)

将此与Python的打字系统进行对比。 Python允许开发人员使用变量而不预先声明类型但是一旦使用了变量,类型就是固定的。相反,变体最初可以被赋予任何类型的值,并且稍后可以存储不同类型而没有任何警告或抱怨。因此,您可以将字符串放入以前保存数字的变量中。

Dim myvar1
myvar1 = 1

'A whole lot more code 

myvar1 = "this string"

如果你必须维护别人的代码,你就会开始理解为什么这种事情(默默地改变一个变量类型)可能会非常难以维护。特别是如果你使用模块级变量,这可能会导致一些非常有趣的问题。这与在VB代码中使用Option Explicit的行相同。如果没有Option Explicit,你可以在没有意识到的情况下做到这一点:

myvar1 = 1

'A whole lot more code here too

myvarl = 2

在某些字体中,这两个变量名称无法区分,这可能导致一些难以发现的错误。