2016-01-02 83 views
1

這個問題關於VB.Net和C#中的隱式轉換。 下面的C#代碼不編譯:C#vs VB.Net - 隱式轉換

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

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

原因是,Foo期望字符串類型的參數,但它的給定的一個int。解決方案是用Foo(3.ToString())替換Foo(3)。精細。

現在,同樣的代碼在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#在這裏之間的一些根本的區別?

+5

It * only *在VB中使用Option Strict Off編譯「很好」 – Plutonix

+6

並且您應該保持開啓狀態 – Steve

+1

一旦您在vb中啓動「Strict On」,它將被視爲錯誤。 –

回答

4

編程語言做出不同的取捨。 VB.NET與嚴格=關是非常鬆懈。這是出於歷史兼容性的原因。

幾十年前的編程語言的設計者認爲這種行爲是有益的初學者。現在我們知道這種寬鬆的行爲對於程序的正確性和開發速度來說是很糟糕的。

的JavaScript從同樣的問題,但更糟糕的困擾。

使用嚴格語義。

+1

謝謝,好把! – jensa