VB.NET弱类型?强类型的?

时间:2010-08-18 23:40:31

标签: vb.net

之前我使用过C#。但是,在我加入一家新公司后,我需要编写vb.net。但是我觉得很难写。因为我发现vb.net不是强类型的。它真的不是强类型的吗?或者任何设置?以下是一些例子。

If (Me.Check1() And Me.Check2()) Then

根据我的C#知识,一旦Me.Check1()返回false,就不会执行Me.Check2()。但是我错了。 And用于按位运算。我应该使用AndAlso进行布尔运算。所以它应该是

If (Me.Check1() AndAlso Me.Check2()) Then

问题是If (Me.Check1() And Me.Check2()) Then仍然有效且没有编译错误。我真的想知道我是否能够检查这种“不恰当”的操作。

AndAndAlso只是其中一个案例。

有时,我需要忽略案例字符串比较。但是,每个人都会犯错误。有时,我做了

If (String.Compare(Me.string1, Me.string2, True)) Then

我想每个人都知道这个问题。它应该是

If (String.Compare(Me.string1, Me.string2, True) = 0) Then

但是,在编译期间我仍然无法检查这种情况。

我喜欢C#,因为它有助于我们在编译过程中发现许多问题。但是,VB.NET让我非常困惑,并且必须在运行时和测试期间确定许多错误。

还有一个例子是

Public Sub MySub(ByVal obj as Object)
    Console.WriteLine(obj.MyProperty)
End Sub

在vb.net中,这种语句仍然有效。为什么?为什么?为什么?有谁知道如何使用像C#一样的vb.net?

2 个答案:

答案 0 :(得分:12)

VB.Net有强类型和弱类型。它通过Strict选项控制。这可以在项目或源文件级别设置。

' Enable VB.Net strong typing 
Option Strict On

' Enable VB.Net weak / dynamic typing
Option Strict Off

答案 1 :(得分:0)

我最近在旧的vb.net项目上点击Option Strict按钮并花了几个小时修复类型错误,但这是值得的。确保在DateTime周围非常小心地使用字符串,并将字符串转换为DateTime转换。我有几个“12:00:00 AM”的实例被添加到文本框的末尾,这会导致旧代码库出现问题。

一旦错误清除,您可以打开Option Infer,这样Dim就会像c#的var一样工作,而且您不必显式键入所有Linq查询。

(我已将此作为评论,但似乎我需要更多积分,抱歉)