Является ли VB Dim тем же, что и С# var?
Это небольшое сомнение: на VB я могу объявлять переменные с помощью Dim. В С# я могу объявить, используя var
. Я больше знаком с тонкостями С#, и я знаю, что var
использует вывод типа для определения типа переменной. Но я не уверен, что делает "Дим".
Я выгляжу как этот вопрос на SO, но он не сравнивает оба ключевых слова. Если есть разница, может кто-нибудь сказать мне, что?
Ответы
Ответ 1
Это зависит от того, указан ли Option Infer
. Обычно следующие эквиваленты:
'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
, который (среди прочего) заставляет все переменные присваивать тип (неявно или неявно) ) во время объявления.
Ответ 2
Они не совпадают. Dim
в VB просто означает, что следующее будет объявлением переменной.
Например, эти два эквивалента:
Dim x As String = "foo"
string x = "foo"
В C#
, var означает, что тип объявления переменных выводится компилятором на основе использования (инициализации). То же самое можно сделать в VB, просто опуская тип декларации. Однако для этого также требуется активировать Option Strict
и Option Infer
:
Dim x = "bar" ' Compiler infers type of x = string
var x = "bar" // same here.
Ответ 3
Это зависит, в vb.net вы пишете
dim x = 1
то он будет таким же, как С# var.
Или вы можете написать
dim x as integer = 1
что совпадает с С#
int x = 1;
Как и vb.net 9.0, вам не нужно иметь тип с инструкцией инициализации
http://msdn.microsoft.com/en-us/library/ms364068(v=vs.80).aspx
Ответ 4
Там это от Скотта Гензельмана
Для С# var:
... [var is] новое ключевое слово, которое означает, "Я хочу объявить переменную, но Im слишком ленив, чтобы написать свой тип."
Один из способов взглянуть на силу VB Оператор Dim должен сказать:
Тихий вид средств: "Я хочу объявить переменная, но я не могу сказать вам много о том, как он себя ведет до позже".
Dim позволяет выполнять фактическую позднюю привязку, пока на С# (сегодня) вы выполняете позднюю привязку с отражением.
Ответ 5
Dim
в VB ничего не делает сам, это просто ключевое слово, что означает, что остальная часть инструкции связана с объявлением переменной. Его ключевое слово BASIC
из тумана времени, означающее "измерение", когда вы не можете объявлять обычные переменные, но вам нужно было объявить "размерность" массивов.
Если в вашем воображении вы проигнорируете Dim
и сравните то, что осталось, вы увидите, что VB и С# очень похожи, за исключением того, что С# делает это неправильным способом (вы можете догадаться, на каком языке я вырос) и, подобно C, сначала ставит тип (или использует var
) и имя следующей переменной.
Ответ 6
Dim
означает "измерение" и используется в VB.Net для объявления переменной. В основном это означает "Зарезервировать некоторое/достаточное пространство для хранения одного типа __". Тип данных приходит позже; обычно на одной строке.
var
в С#, как вы упомянули, на самом деле является ярлыком, чтобы сообщить компилятору вывести тип данных на основе назначенного значения.
Ответ 7
ключевое слово var специально набирается типом данных, назначенным ему в переменной.
Но dim инвариантен, который может быть использован для любого типа.