Это зависит от того, Option Infer
is speci Fied. Как правило, следующие условия эквивалентны:
'VB.Net
Dim myVar
Dim myString = "Hello world!"
Dim myString2 As String = "Hello world!"
//C#
object myVar;
object myString = "Hello world!"; //Notice type is object, *not* string!
string myString2 = "Hello world!";
Однако с Option Infer
включена, Dim
становится больше как var
, когда переменная инициализируется на той же строке:
'VB.Net
Option Infer On
Dim myVar
Dim myString = "Hello!"
//C#
object myVar;
var myString = "Hello!"; //Or the equivalent: string myString = "Hello!";
Обратите внимание, что это может привести к некоторой путанице, потому что внезапная инициализация переменной в точке объявления означает нечто иное, чем ее инициализация позже :
'VB.Net
Option Infer On
Dim myVar1
myVar1 = 10
Dim myVar2 = 10
myVar1 = New MyClass() 'Legal
myVar2 = New MyClass() 'Illegal! - Value of type 'MyClass' cannot be converted to 'Integer'
Это может быть исправлено путем включения Option Strict
, что (помимо всего прочего) заставляет все переменные должны быть приведены тип (неявно или нет) в момент декларации.
Для получения более подробного разъяснения в дополнение к тому, что вы уже натолкнулись, исследование раннего или позднего связывания. В этом разница между ними. –