C#vs VB.Net - 隐式转换

时间:2016-01-02 00:29:23

标签: c# .net vb.net

这个问题是关于VB.Net和C#中的隐式转换。 以下C#代码无法编译:

class Program
{
    static void Foo(string s)
    {
        Console.WriteLine(s);
    }

    static void Main(string[] args)
    {
        Foo(3); // Cannot convert from int to string
    }
}

原因是Foo期望一个类型为string的参数,但是给定一个int。解决方案是将Foo(3)替换为Foo(3.ToString())。细

现在,在VB.Net中编写相同的代码:

Module Module1
    Sub Foo(s As String)
        Console.WriteLine(s)
    End Sub

    Sub Main()
        Foo(5)
    End Sub
End Module

这编译并运行得很好!

问题:为什么VB.Net允许这样做,VB.Net和C#之间有一些根本区别吗?

1 个答案:

答案 0 :(得分:4)

编程语言有不同的权衡取舍。 VB.NET与Strict = Off是非常宽松的。这是出于历史兼容性的原因。

几十年前,编程语言设计者认为这种行为对初学者很有帮助。现在我们知道这种松懈的行为对于程序的正确性和开发速度来说是非常糟糕的。

JavaScript遇到了同样的问题,但更糟糕。

使用严格的语义。